---恢复内容开始---
TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。利用三元组(ip地址,协议,端口)就可以标识网络的进程。TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket),来实现网络进程之间的通信,网络中进程通信是无处不在,这就是我为什么说“一切皆socket”。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作,Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
单线程较多线程来说,系统稳定、扩展性极强、软件丰富。多用于点对点的服务。
单线程处理的优点:同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低,如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应。
多线程处理可以同时运行多个过程,简单说下多线程开发的益处:
1.多线程开发可以将耗时操作放入子线程,将UI刷新加入主线程,防止页面卡顿。
2.在并发操作时使用多线程,如C/S架构的服务器端并发线程响应用户的请求。
3.在多核CPU系统中,使用线程可以提高程序响应速度,提高CPU和内存的利用率。
4.改善程序结构。将一个复杂的的进程分为多个线程,减少类之间的耦合。
5.将程序分块管理,方便程序的开发和维护。
6.可以随时停止任务。 可以分别设置各个任务的优先级以优化性能。
非常花销小,切换快,更"节俭"的多任务操作方式
线程间方便的通信机制
1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力
每个进程是由私有的虚拟地址空间、代码、数据和其它系统资源组成。进程在运行时创建的资源随着进程的终止而死亡
主线程以函数地址的形式,如main或WinMain函数,提供程序的启动点,当主线程终止时,进程也随之终止,应用程序又可以分解成许多独立执行的线程,每个线程并行的运行在同一进程中。
进程中的所有线程都在该进程的虚拟地址空间中,使用该进程的全局变量和系统资源。操作系统给每个线程分配不同的CPU片区及时间区,在某一个时刻,CPU只执行一个时间片内的线程,多个时间片中的相应线程在CPU内轮流执行,由于每个时间片时间很短,所以对用户来说,仿佛各个线程在计算机中是并行处理的。操作系统是根据线程的优先级来安排CPU的时间,优先级高的线程优先运行,优先级低的线程则继续等待。
线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。
线程被分为两种:用户界面线程和工作线程(又称为后台线程)。用户界面线程通常用来处理用户的输入并响应各种事件和消息,
所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。
DMA(Direct Memory Access,直接内存存取)
DOS这样的单进程(而且无线程概念)系统
当需要执行I/O操作时,使用异步操作比使用线程+同步I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.net Remoting等跨进程的调用
一个好的程序是先写好设计文档再进行编程的,在设计文档的指导下,才能写出安全的代码。好好地利用VISIO,