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

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

onevps:新增(支付宝+中文网站),香港/新加坡/日本等9机房,1Gbps带宽,不限流量,仅需$4/月

onevps最新消息,为了更好服务中国区用户:1、网站支付方式新增了支付宝,即将增加微信;原信用卡、PayPal方式不变;(2)可以切换简体中文版网站,在网站顶部右上角找到那个米字旗,下拉可以换中国简体版本。VPS可选机房有:中国(香港)、新加坡、日本(东京)、美国(纽约、洛杉矶)、英国(伦敦)、荷兰(阿姆斯特丹)、瑞士(苏黎世)、德国(法兰克福)、澳大利亚(悉尼)。不管你的客户在亚太区域、美洲区...

云俄罗斯VPSJusthost俄罗斯VPS云服务器justg:JustHost、RuVDS、JustG等俄罗斯vps主机

俄罗斯vps云服务器商家推荐!俄罗斯VPS,也叫毛子主机(毛子vps),因为俄罗斯离中国大陆比较近,所以俄罗斯VPS的延迟会比较低,国内用户也不少,例如新西伯利亚机房和莫斯科机房都是比较热门的俄罗斯机房。这里为大家整理推荐一些好用的俄罗斯VPS云服务器,这里主要推荐这三家:justhost、ruvds、justg等俄罗斯vps主机,方便大家对比购买适合自己的俄罗斯VPS。一、俄罗斯VPS介绍俄罗斯...

无法忍受旧版不兼容PHP7+主题 更换新主题

今天父亲节我们有没有陪伴家人一起吃个饭,还是打个电话问候一下。前一段时间同学将网站账户给我说可以有空更新点信息确保他在没有时间的时候还能保持网站有一定的更新内容。不过,他这个网站之前采用的主题也不知道来源哪里,总之各种不合适,文件中很多都是他多年来手工修改的主题拼接的,并非完全适应WordPress已有的函数,有些函数还不兼容最新的PHP版本,于是每次出现问题都要去排查。于是和他商量后,就抽时间把...

linux多线程为你推荐
info域名注册百度还收录新注册的info域名吗?虚拟主机推荐谁能推荐个性价比高的虚拟主机?国内ip代理找一个好用的国内电信IP代理?免费vps服务器有没有便宜的vps,最好是免费的免费vps服务器免费VPS服务器。和免费的好用虚拟主机域名申请申请域名需要哪些流程具体点 谢谢虚拟空间哪个好虚拟内存一般设多大比较好?重庆虚拟空间现在重庆那家主机空间最好?免费网站空间申请申请免费空间的网站免费网站空间申请需要一个免费的网站空间申请地址。
网站域名备案 buyvm 樊云 512m 华为云主机 发包服务器 台湾谷歌网址 777te 福建天翼加速 架设服务器 php空间推荐 网络空间租赁 ebay注册 韩国代理ip 阿里云免费邮箱 石家庄服务器托管 重庆联通服务器托管 hdchina 机柜尺寸 linux命令vi 更多