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 多线程开发注意什么

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

易探云服务器怎么过户/转让?云服务器PUSH实操步骤

易探云服务器怎么过户/转让?易探云支持云服务器PUSH功能,该功能可将云服务器过户给指定用户。可带价PUSH,收到PUSH请求的用户在接收云服务器的同时,系统会扣除接收方的款项,同时扣除相关手续费,然后将款项打到发送方的账户下。易探云“PUSH服务器”的这一功能,可以让用户将闲置云服务器转让给更多需要购买的用户!易探云服务器怎么过户/PUSH?1.PUSH双方必须为认证用户:2.买家未接收前,卖家...

racknerd:美国大硬盘服务器,$599/月,Ryzen7-3700X/32G内存/120gSSD+192T hdd

racknerd当前对美国犹他州数据中心的大硬盘服务器(存储服务器)进行低价促销,价格跌破眼镜啊。提供AMD和Intel两个选择,默认32G内存,120G SSD系统盘,12个16T HDD做数据盘,接入1Gbps带宽,每个月默认给100T流量,5个IPv4... 官方网站:https://www.racknerd.com 加密数字货币、信用卡、PayPal、支付宝、银联(卡),可以付款! ...

【IT狗】在线ping,在线tcping,路由追踪

IT狗为用户提供 在线ping、在线tcping、在线路由追踪、域名被墙检测、域名被污染检测 等实用工具。【工具地址】https://www.itdog.cn/【工具特色】1、目前同类网站中,在线ping 仅支持1次或少量次数的测试,无法客观的展现目标服务器一段时间的网络状况,IT狗Ping工具可持续的进行一段时间的ping测试,并生成更为直观的网络质量柱状图,让用户更容易掌握服务器在各地区、各线...

linux多线程为你推荐
免费国内空间谁知道国内哪个免费空间好,要1GB的域名服务域名服务器是什么?有什么作用免费网站域名申请哪有里可以申请免费域名的网站?国内ip代理全国各省代理IP云服务器租用租用云服务器,要注意什么?虚拟主机软件常见的虚拟机软件有哪几种?域名网电脑上的域名分别表示什么!备案域名网站备案是什么意思?备案域名还是备案空间?还是都需要备案?备案域名购买哪有备案好的域名购买?动态域名请问动态域名有什么作用啊?
vps试用 mysql虚拟主机 免费vps burstnet softbank官网 淘宝双十一2018 500m空间 国外在线代理 web服务器的架设 彩虹云 空间购买 www789 美国凤凰城 永久免费空间 阿里dns 七十九刀 香港ip restart 美国服务器 服务器是什么意思 更多