zoukankan      html  css  js  c++  java
  • 线程通信和线程同步【操作系统之哲学原理读书笔记】

    前提:一个进程至少有一个线程,进程之间的通信就是进程里面线程之间的通信。进程通信又有个专有缩写,叫IPC(Inter-Process Communication)。

    Q1:为什么要通信?

    A:通信是人类的基本需求。个体的力量是有限的,只有适当的合作,才能完成更加庞大的任务。合作,就需要交流信息和共享信息,这,就是线程之间进行通信的基本诉求。

    Q2:线程之间利用什么来实现通信?

    A:

    (1)、管道

           管道可以想向成有线电话,人与人之间在使用有线电话进行通话的时候,中间的电线就相当与专属于通话双方的管道。在本书中,管道特别用与同一进程中不同线程之间的通话。

    (2)、记名管道

           理解可以和管道类似,只是“记名管道”用在不同进程的线程之间的通信

    总结:联系一下现实生活中,在同一个市区拨打电话不需要加区号,而不同市区之间的通话则必须加拨区号,这个区号的作用就和记名管道的作用类似

    (3)、套接字(Socket)

    初次接触套接字,是在网络课上。因为将要学习Soxket编程了。套接字首先在BSD中出现,随后几乎渗透到所有主流的操作系统。使用套接字通信的双方必须均创建一个套接字,其中一方作为服务器,一方作为客户方。服务器方必须创建一个服务区套接字,然后在该套接字上进行监听,等待远方的连接请求。

    (4)、信号

    信号,就是现实生活中的电报,在计算机里,信号就是一个内核对象(内核数据结构),并利用软中断进行发送。

    可以解决我们的如下需求:

    • 想迫使一方对我们的通信立即作为回应。
    • 我们不愿事先建立任何连接,而是临时突然觉得需要向某个进程通信
    • 传输的信息量微小,建立一条专线并不划算。

    (5)、信号量

    类似于现实中的旗语,在计算机里就是一个简单的整数,不光是一种通信机制,还是一种同步机制。

    (6)、共享内存

    如果两个进程的关系特别特别好,可以理解为恋爱中的两个人,恨不得一直粘在一起,需要共享特别多的数据和信息。。。。。这时,只有拥抱,才是最好的通信。。。。。不过,共享内存的确定就是管理复杂,两个人距离太近了容易审美疲劳,所以,合适的距离才是最好的。而这个合适二字,需要根据不同的需求来决定。

    (7)、消息队列

    如果读者了解Windows编程的相关机制,就对消息队列一定不陌生,看着像管道?????NO,管道有固定的双方,而消息队列没有固定的通信双方。

    Q3:线程之间为什么要同步?同步的目的是什么?

    A:线程在带来程序的并发的优点以后,也带来了程序执行结果的不确定性,而程序执行结果的不确定性是我们所不允许的。同步的目的就是保证多线程执行下的结果的确定性,记住:同时还尽量减少对线程执行的限制。

  • 相关阅读:
    iframe跨域
    jquery 中的 $(“#”) 与 js中的document.getElementById(“”) 的区别
    jQuery中this与$(this)的区别
    div层调整zindex属性无效原因分析及解决方法
    The local variable......been initialized
    equals方法的重写
    eclipse快捷键
    JAVA中几个常用的方法
    Java基础4(方法基础和一维数组)
    Java基础3笔记
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742785.html
Copyright © 2011-2022 走看看