读书笔记《Unix编程艺术》四

Posted Virtual_Func

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读书笔记《Unix编程艺术》四相关的知识,希望对你有一定的参考价值。

多道程序设计

  • unix设计的核心思想:
    • 做单件事并做好
    • Less is more

Unix IPC 方法的分类

把任务转给专门程序

  • 核心思想:一个程序调用另一个程序来完成专门的某个任务
  • 实现方式:被调用程序在运行完毕之前接管用户的键盘与现实,调用程序在该过程中不与之通信,被调程序运行结束后归还控制权。专门程序通过文件系统与父进程进行通信。(如将结果写到指定文件中等方式)
  • 特点:被调用进程在运行时不需要与调用进程通信

管道、重定向

  • 核心思想:文本数据流沿管道从前一个进程中流入后一个进程
  • 实现方式:管道中所有阶段的进程是并发运行的,每一段等待前一段的输出文本流作为其输入,但在下一段能运行前没有那个段必须退出。前一个段运行结束后自行退出。
  • 特点:管道能协助每个进程只做一件事情。管道最大的缺点是单向性

包装器

  • 核心思想:包装器为被调用程序专用化,即通过指定参数来修改被调用程序的行为。
  • 例子:假设存在如下一个脚本文件,其内容如下:
tar -czvf /dev/st0 "$@"

该脚本就是一个包装器,这是一个为tar磁带归档程序编写的包装器,该包装器只简单的提供一个固定参数,并把用户提供的其他参数传递给tar。

安全性包装器

  • 核心思想:安全性包装器可调用守门程序检查某类凭证,然后根据返回的状态值有条件的执行另一个程序
  • 特点:通过在调用被包装的程序前,先调用一个守门程序以实现对被包装程序的安全保护

从进程

  • 核心思想:调用进程创建被调进程,且子进程通过标准输入和标准输出的管道可与主进程通信
  • 实现方式:如Unix 的popen 就是一个实现方法,主从进程之间通过管道进行通信。与把任务交给专门进程的区别在于后者两个进程在运行过程中不需要通信
  • 特点:主从进程之间需要处理通信协议以避免死锁
  • 建议实现方式:让主进程支持通过命令行开关或环境变量来让主进程的调用者指定自己的从进程命令

对等进程间通信

1. 临时文件

  • 优点:轻量级
  • 缺点:不安全,可能会遗留垃圾数据

2. 信号

  • 建议使用方式:pidfile技法:需要信号的程序会向已知位置写入一个包含进程ID(PID)的小文件,其他程序通过读取该文件获取需要该信号的PID序列

3. 套接字

4. 共享内存

建议不用的方法

1. 远过程调用

  • 作者认为远过程调用中进程通信为程序设计增大了复杂度,且进程间网络通讯的延迟也比较高。建议通过在一端进程将内存中的数据结构序列化为文本后传输到对端,在对端反序列化后执行,通过该方式替换RPC
  • 个人认为,具体情况具体分析,RPC现在已经比较成熟。在通信量少的进程间使用RPC

2. 线程

  • 线程只是带来了性能方面的提升,但是会增加程序设计的复杂度。且进程间共享除栈区之外的其他区域,降低了线程访问控制的粒度。
  • 由于线程共享除栈区之外的其他区域,因此使用库函数的时候需要考虑库函数是否是线程安全的。如最初Linux中errno等全局控制变量,就不是线程安全的。
  • 个人认为线程的存在还是有必须要的。例如http服务器中的线程池,通过线程池从作业队列中抓取作业, 并执行作业,其中包含三个部分,线程控制,作业控制以及作业的多态形式,是一种很有用的多线程工作方式。对于任务可以划分的程序可以用多道程序设计将程序分为多进程。但是对于并发执行同一个任务的进程,还是只能使用多线程。

以上是关于读书笔记《Unix编程艺术》四的主要内容,如果未能解决你的问题,请参考以下文章

读书笔记《Unix编程艺术》六

读书笔记《Unix编程艺术》六

读书笔记《Unix编程艺术》一

读书笔记《Unix编程艺术》二

读书笔记《Unix编程艺术》三

读书笔记《Unix编程艺术》五