并发就是多个执行单元或多个进程并行执行,而这多个执行单元对资源进行共享,比如访问同一个变量或同一个硬件资源,这个时候就很容易出现竞态(说简单点就是竞争同一个”女朋友”)。
为了处理并发带来的问题,Linux有几种处理方法:
1. 中断屏蔽
2. 原子 *** 作
3. 自旋锁
4. 信号量
5. 互斥体
6. 完成量
以上几种处理并发的方式各有利弊,需要根据实际情况来选择使用哪一种。
它的原理就是让CPU不响应中断,一般使用这种方法的要求代码段要比较少,不能占用大量的时间。一般在驱动中不推荐使用这种方式。
原子量保证对一个整形数据的 *** 作是排他性的。就是该 *** 作绝不会在执行完毕前被任何其他任务或事件打断。
自旋锁是一种典型的对临界资源进行互斥访问的手段。当一个自旋锁已经被其他线程持有,而另一个线程试图去获取自旋锁,这时候就会一直在那里等待(原地自旋等待)。如果递归调用自旋锁,就会导致系统死锁。
与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待状态。新的Linux内核倾向于直接使用mutex作为互斥手段,信号量用作互斥不再被推荐使用。
当进程占用资源时间较长时,用互斥体会比较好。
使用方法:
完成量的机制是实现一个线程发送一个信号通知另一个线程完成某个任务。一个线程调用wait_for_completion后就进入休眠,另一个线程执行完某个任务后就发送通知给进入休眠的线程,然后它就执行wait_for_completion后面的代码。
并发是指多个线程同时运行,比如windows就是并发的 *** 作系统。并发以后就可以,一边听歌,一边浏览网页。即,看起来像同一时间可以干多个事情。
同步,就是一种控制策略。
就比如说,用迅雷看电影。一边下载,一边播放。这个时候下载进程和播放进程,他们两个就有同步的机制,例如:只能播放视频文件中已经下载完成的部分,没有下载的不能播放。并且,如果已经下载的全部播放完了,那播放器就要等待,等到有内容的时候再继续播放。
并发怎么写:首先要把任务拆分成多个能独立执行的部分。例如:下载部分,播放部分。
然后控制好并行部分的运行机制。
linux查看连接数,并发数1、查看apache当前并发访问数: netstat -an grep ESTABLISHED wc -l对比httpd.conf中MaxClients的数字差距多少。2、查看有多少个进程数:ps auxgrep httpdwc -l3、可以使用如下参数查看数据server-status?auto#ps -efgrep httpdwc -l1388统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。#netstat -natgrep -i 80wc -l4341netstat -an会打印系统当前网络链接状态,而grep -i 80是用来提取与80端口有关的连接的,wc -l进行连接数统计。 最终返回的数字就是当前所有80端口的请求总数。#netstat -nagrep ESTABLISHEDwc -l376netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。最终返回的数字就是当前所有80端口的已建立连接的总数。netstat -natgrep ESTABLISHEDwc - 可查看所有建立连接的详细记录查看Apache的并发请求数及其TCP连接状态:linux命令:netstat -n awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'返回结果示例:LAST_ACK 5SYN_RECV 30ESTABLISHED 1597FIN_WAIT1 51FIN_WAIT2 504TIME_WAIT 1057其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。(这个参数还不太懂,为啥是等待超时结束,请大神指教)欢迎分享,转载请注明来源:内存溢出
评论列表(0条)