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

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

ZJI:香港物理服务器,2*E5-2630L/32G/480G SSD/30Mbps/2IP/香港BGP,月付520元

zji怎么样?zji是一家老牌国人主机商家,公司开办在香港,这个平台主要销售独立服务器业务,和hostkvm是同一样,两个平台销售的产品类别不一平,商家的技术非常不错,机器非常稳定。昨天收到商家的优惠推送,目前针对香港邦联四型推出了65折优惠BGP线路服务器,性价比非常不错,有需要香港独立服务器的朋友可以入手,非常适合做站。zji优惠码:月付/年付优惠码:zji 物理服务器/VDS/虚拟主机空间订...

IonSwitch:$1.75/月KVM-1GB/10G SSD/1TB/爱达荷州

IonSwitch是一家2016年成立的国外VPS主机商,部落上一次分享的信息还停留在2019年,主机商提供基于KVM架构的VPS产品,数据中心之前在美国西雅图,目前是美国爱达荷州科德阿伦(美国西北部,西接华盛顿州和俄勒冈州),为新建的自营数据中心。商家针对新数据中心运行及4号独立日提供了一个5折优惠码,优惠后最低1GB内存套餐每月仅1.75美元起。下面列出部分套餐配置信息。CPU:1core内存...

美国G口/香港CTG/美国T级超防云/物理机/CDN大促销 1核 1G 24元/月

[六一云迎国庆]转盘活动实物礼品美国G口/香港CTG/美国T级超防云/物理机/CDN大促销六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,...

linux多线程为你推荐
虚机虚拟主机是什么东东呢?虚拟空间租赁做个自己公司的网站,是租啊还是注册虚拟空间啊?租虚拟空间要钱吗.net虚拟主机想买个同时支持php和.net的虚拟主机,哪里可以买到这样的空间?是同时支持的那种。中国互联网域名注册负责我国境内internet用户域名注册是什么机构中文域名注册查询怎么查我们公司的中文域名是被谁注册的?便宜的虚拟主机免费、便宜的虚拟主机哪里有?要好用的 ,速度快的便宜的虚拟主机哪儿有便宜的虚拟主机?国外主机空间可以购买国外主机(空间一样吗?)来做私服吗?重庆虚拟空间重庆虚拟主机租用那家好?深圳网站空间深圳网站设计 哪家好一些?
视频空间租用 新通用顶级域名 com域名抢注 国内免备案主机 a2hosting 百度云100as l5639 42u标准机柜尺寸 天猫双十一秒杀 全能主机 北京主机 河南服务器 777te 1g内存 美国免费空间 免费网页空间 web服务器搭建 smtp虚拟服务器 中国电信测速器 路由跟踪 更多