linux多线程面试题 linux 多线程开发注意什么

linux多线程  时间:2020-12-27  阅读:()

Linux中进程和线程的开销基本一样啊,为什么还要多线程呢?

个人感觉多进程不好管理,多线程是运行在同一个进程中的,比较好管理

Linux多线程编程

程序代码test.c共两个线程,一个主线程,一个读缓存区的线程: #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> char globe_buffer[100]; void *read_buffer_thread(void *arg); //这里先声明一下读缓存的线程,具体实现写在后面了 int main() { int res,i; pthread_t read_thread; for(i=0;i<20;i++) globe_buffer[i]=i; printf(" Test thread : write buffer finish "); sleep(3);这里的3秒是多余,可以不要。

res = pthread_create(&read_thread, NULL, read_buffer_thread, NULL); if (res != 0) { printf("Read Thread creat Error!"); exit(0); } sleep(1); printf("waiting for read thread to finish... "); res = pthread_join(read_thread, NULL); if (res != 0) { printf("read thread join failed! "); exit(0); } printf("read thread test OK, have fun!! exit ByeBye "); return 0; } void *read_buffer_thread(void *arg) { int i,x; printf("Read buffer thread read data : "); for(i=0;i<20;i++) { x=globe_buffer[i]; printf("%d ",x); globe_buffer[i]=0;//清空 } printf(" read over "); } --------------------------------------------------------------------------------- 以上程序编译: -D_REENTRANT test.c -o test.o –lpthread 运行这个程序: $ ./test.o:

linux和windows多线程的异同

linux多线程及线程同步和windows的多线程之间的异同 并不是所有的程序都必须采用多线程,有时候采用多线程性能还不如单线程。

采用多线程的好处如下: (1)多线程之间采用相同的地址空间,共享大部分的数据,和多进程相比,代价比较节俭,而启动新的进程必须分配给它独立的地址空间,需要数据表来维护代码段,数据段和堆栈段等等。

(2)对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,费时而且不方便。

多线程之间可以直接共享数据,比如共享全局变量。

共享全局变量要注意变量的同步性,不然容易引起灾难性的后果。

(3)在多cpu的情况下,不同的线程可以运行在不同的cpu下,这样就完全并行了。

在这种情况下,采用多线程比较理想。

比如要做一个任务分2个步骤,为提高工作效率可以多线程技术开辟2个线程,第一个线程做第一步,第2个线程做第2步。

这个时候要注意同步。

因为只有第一步做完才能做第2步的工作。

这时,可以采用同步技术进行线程之间的通信。

针对这种情况,讲解一下多线程之间的通信,在windows平台下,多线程之间通信采用的方法主要有: (1)共享全局变量,比如上面的问题,第一步要向第2步传递收据,可以共享全局变量,让两个线程之间传递数据,这时主要考虑的问题就是变量的同步,因为后面的线程在对数据进行操作的时候,第一个线程又改变了数据的内容,不同步保护,后果很严重(即读回脏数据)。

这种情况下,容易想到的同步方法是设置一个bool flag,比如在第2个线程还没有用完数据前,第一个线程不能写入。

有时在2个线程所需的时间不相同的时候,怎样达到最大效率的同步,就比较麻烦。

这时可以多开几个缓冲区进行操作。

如果是2个线程一直在跑,由于时间不一致,缓冲区迟早会溢出。

在这种情况下要考虑:是不让数据写入还是让数据覆盖掉旧的数据。

这时候要具体问题具体分析。

即用bool变量控制同步,linux 和windows是一样的。

Linux 下多线程和多进程程序的优缺点,各自适合什么样的业务场景

Linux 下多线程和多进程程序的优缺点,各自适合什么样的业务场景   IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。

进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。

当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。

这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。

  如果是UNIX/linux环境,采用多线程没必要。

  多线程比多进程性能高?误导!   应该说,多线程比多进程成本低,但性能更低。

  在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。

内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。

  多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。

  多线程是平面交通系统,造价低,但红绿灯太多,老堵车。

  我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。

  高性能交易服务器中间件,如TUXEDO,都是主张多进程的。

实际测试表明,TUXEDO性能和并发效率是非常高的。

TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。

java的多线程与linux的多线程的关系

java自己实现了线程库,也就是说java的线程并不和操作系统的线程对应,jvm在操作系统上面是一个进程,当这个进程被操作系统调度到后,jvm内部实现的线程库再调度java线程,为什么是这样呢?考虑到以前的操作系统内核,比如linux,在以前都不直接支持线程,用户线程和内核线程是多对一的关系,solaris一度也是这样,所以java当然心有余而力不足了,你操作系统都不能完美支持线程,你让我实现不是难为我吗?在那个年代,java多线程的调度完全是自主的,操作系统根本不知道java是多线程的,调度策略完全自己实现,单cpu下肯定是分时的,多cpu下就看jvm会不会建立多cpu上的多jvm实例了。

到了后来,操作系统内核纷纷都支持了多线程(windows开始就支持),那么java也要考虑推卸一些责任了,这样java线程就和操作系统线程一一对应或多多对应了,这个时候,如果是一一对应,那么线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。

问:java获得cup使用权采用的抢占机制,使用cup的时候是分时机制,这句话对不对? 答:部分对,早期实现,基本可以实现抢占式,但是现代实现,如果系统不支持抢占,那么jvm也无所谓抢占了。

问:多线程使用cup和使用的操作系统有关还是java机制有关(xp是什么机制) 答:早期是java机制实现,现在大部分是操作系统实现的,java机制仅仅保留了相关策略从而影响调度;xp是基于优先级的抢占式调度,其性能很大程度依赖于动态优先级提升

面试题 linux 多线程开发注意什么

注意共享数据的保护 包括动态数据,全局变量,静态局部变量等。

Stablehost 美国主机商黑五虚拟主机四折

如今我们网友可能较多的会选择云服务器、VPS主机,对于虚拟主机的话可能很多人不会选择。但是我们有些外贸业务用途的建站项目还是会有选择虚拟主机的。今天看到的Stablehost 商家虚拟主机在黑五期间也有四折优惠,对于这个服务商而言不是特别的喜欢,虽然他们商家和我们熟悉的老鹰主机商有些类似,且在后来老鹰主机改版和方案后,Stablehost 商家也会跟随改版,但是性价比认为不如老鹰主机。这次黑色星期...

Dynadot多种后缀优惠域名优惠码 ,.COM域名注册$6.99

Dynadot 是一家非常靠谱的域名注册商家,老唐也从来不会掩饰对其的喜爱,目前我个人大部分域名都在 Dynadot,还有一小部分在 NameCheap 和腾讯云。本文分享一下 Dynadot 最新域名优惠码,包括 .COM,.NET 等主流后缀的优惠码,以及一些新顶级后缀的优惠。对于域名优惠,NameCheap 的新后缀促销比较多,而 Dynadot 则是对于主流后缀的促销比较多,所以可以各取所...

云雀云(larkyun)低至368元/月,广州移动1Gbps带宽VDS(带100G防御),常州联通1Gbps带宽VDS

云雀云(larkyun)当前主要运作国内线路的机器,最大提供1Gbps服务器,有云服务器(VDS)、也有独立服务器,对接国内、国外的效果都是相当靠谱的。此外,还有台湾hinet线路的动态云服务器和静态云服务器。当前,larkyun对广州移动二期正在搞优惠促销!官方网站:https://larkyun.top付款方式:支付宝、微信、USDT广移二期开售8折折扣码:56NZVE0YZN (试用于常州联...

linux多线程为你推荐
独立ip主机独立ip虚拟主机怎么样?是不是真的很好用,和vps有什么区别吗?中国互联网域名注册中国互联网络域名注册暂行管理办法的第三章 域名注册的申请域名服务商比较专业的域名服务商有哪些?好的域名和域名服务商没关系吧?国外网站空间怎么查看一个网站的空间是在国内还是在国外啊?1g虚拟主机我要做一个下载资料类网站,刚买了一个虚拟主机1G的,提供商说一次,只能上传一个小于10M的文件合肥虚拟主机虚拟主机哪里买好一些?apache虚拟主机Apache跟虚拟主机有什么关系?淘宝虚拟主机淘宝里卖虚拟主机、独立服务器、VPS的都是怎么进货的。美国虚拟主机购买美国虚拟主机在国内那家卖的便宜,稳定,功能全??长沙虚拟主机在长沙,哪个兼职网站最最可靠??
qq空间域名 com域名抢注 唯品秀 嘟牛 微信收钱 免费申请个人网站 免费dns解析 英国伦敦 vul 湖南idc 中国域名 华为k3 宿迁服务器 美国asp空间 ncp winds 中美互联网论坛 服务器操作系统 卡巴斯基免费版 linuxvi 更多