第一章并发简介

来源:互联网 发布:淘宝女装店哪个好 编辑:程序博客网 时间:2024/04/30 21:53
第一章 简介
1.1 并发简史
 
 
1.资源利用率
在某些情况下,程序必须等待某个外部操作完成,例如输入或输出操作等,而在等待时程序无法执行其他任何操作。因此,如果在等待的
同时可以运行另一个程序,那么无疑将提高资源的利用率。
2.公平性
不同的用户和程序对计算机的资源有着共同的使用权。一种高效的运行方式是通过粗粒度的时间分片使这些用户和程序能共享计算机资源
而不是由一个程序由头到尾,然后再启动下一个程序。
3.便利性
通常来说,在计算多个任务时,应该编写多个程序,每个程序执行一个任务在必要事相互通信,这比之编写一个程序来计算所有任务更容易
实现
 
串行编程模型的优势在于其直观性和简单性,因为它模仿了人类的工作方式:每次只做一件事情,做完之后再做另一件。
 
线程也被称为轻量级线程。在大多数操作系统中,都是以线程为基本调度单位,而不是进程。如果没有明确的协同机制,那么线程将彼此
独立执行。由于同一个进程中所有的线程都将共享内存的地址空间,因此这些线程都能访问相同的变量并在同一个堆上分配对象,这就需要
实现一种比在进程间共享数据粒度更细的数据共享机制。如果没有明确的同步机制来协同对共享数据的访问,那么当一个线程正在使用某个
变量时,另一个线程可能同时访问这个变量,这将造成不可预测的结果。
 
1.2线程的优势
如果使用得当,线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能,线程能够将大部分的异步工作流转换成串行
工作流,因此能更好地模拟人类的工作方式和交换方式。
在GUI应用程序中,线程可以提高用户界面的相应灵敏度,而在服务器应用程序中,可以提升资源利用率以及系统吞吐率。
 
1.2.1发挥多处理器的强大能力
由于基本的调度单位是线程,因此如果在程序中只有一个线程,那么最多同时只能在一个处理器上运行。在双处理器的系统上,单线程的程序只能使用
一半的cpu资源,而在拥有100个处理器上执行,将有99%资源无法使用。另一方面,多线程程序可以同时在多个处理器上执行。如果设计正确,多线程
程序可以通过提高处理器资源的利用率来提升系统吞吐率。
 
使用多个线程还有助于在单处理器系统上获得更高的吞吐率。如果程序是单线程的,那么当程序等待某个同步i/o操作完成时,处理器将处于空闲状态。
而在多线程程序中,如果一个线程在等待i/o操作完成,另一个线程可以继续运行,使程序能够在i/o阻塞期间继续运行。
1.2.2 建模的简单性
 
1.2.3异步事件简化处理
服务器应用程序在接受来自多个远程客户端的套接字连接请求时,如果每个连接都分配其各自的线程并且使用同步i/o;那么就会降低这类程序的开发难度。
如果某个应用程序对套接字执行读操作而此时还没有数据到来,那么这个读操作将一直阻塞,直到有数据到达。在单线程应用程序中,这不仅意味着在处理请求
的过程中将停顿,而且还意味着在这个线程被阻塞期间,对所有请求的处理都将停顿,为了避免这个问题,单线程服务器应用程序必须使用非阻塞i/o,这种i/o复杂性
要远远高于同步i/o。并且很容易出错。然而每个请求都拥有自己的处理线程,那么在处理某个请求时发生阻塞将不会影响其他请求的处理。
 
1.2.4响应更灵敏的用户界面
 
1.3线程带来的风险
1.3.1 安全性问题
1.3.2 活跃性问题
1.3.3 性能问题
1.3.4 线程无处不在
0 0
原创粉丝点击