多线程应用场合,及进程/线程间通信方法

  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 

posted @ 2012-03-11 14:02  万法自然~  阅读(438)  评论(0编辑  收藏  举报