多线程应用场合,及进程/线程间通信方法
1、使用多线程的场合:
a. offloading time-consuming task。由辅助线程来执行耗时计算,而使GUI有更好的反应。(最常用)
b. Scalability. 服务器软件常使用。在程序中产生多个线程,让多个CPU分担工作
c. Fair-share resource allocation。对负担较重的服务器设置请求最大个数,并对某些请求做优先处理
d. Simulations。线程用于仿真测试(???)
2、线程如何同步
a. 使用事件(Event)来同步现程
b. 使用临界区域,控制线程对特定资源的独占式访问。
缺点是Critical Section不是核心对象,无法获知进入临界区域的线程状态
c. 使用互斥器(Mutex)。区别于临界区的地方:互斥器是核心对象,可以通过设置Timeout,避免被长期锁死。
d. 信号量(Semaphore),最具历史的同步机制,是解决producer/consumer问题的关键要素。
可用资源数可以大于1
3、线程间通讯方式
a. 全局变量
b. 消息,如果是同一进程中的线程,可以发送自定义消息,传递数据给目标线程
4、进程间通讯方式
(线程分属于不同进程,意味着它们分驻在不同的地址空间,通讯需要跨越地址空间的边界)
a. Windows专门定义的WM_COPYDATA,用于在跨进程的线程间搬移数据
b. 使用共享内存(Shared Memory)
c. IPC(Inter-Process Communication)进程间通信
共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,
通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,
从而实现对远程计算机的访问。
包括:Anonymous Pipes;Named Pipes;Mailslots;OLE Automation;DDE(动态数据交换,用于16位Windows,现在避免使用)
关于Linux环境下进程间通信,参考:http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html
参考资料:
http://www.doc88.com/p-998191571090.html