1.网络:UDP\TCP\SOCKET+2.内存管理:进程/线程详解

目录

一、UDP和TCP、SOCKET来源看小林的code网站,内容详细☆

1.1 TCP和UDP的特点

1.2常见的TCP和UDP的端口号

  1.3进程间的通信方式

(1)管道

(2)消息队列

(3)共享内存

(4)信号量

(5)信号

(6)Socket

1.4 TCP 三次握手与四次挥手面试题详解 | 小林coding


一、UDP和TCP、SOCKET来源看小林的code网站,内容详细☆

1.1 TCP和UDP的特点

1.2常见的TCP和UDP的端口号

【网络编程】socket、端口、进程的关系_socket端口-CSDN博客

  1.3进程间的通信方式

           5.2 进程间有哪些通信方式? | 小林coding

(1)管道
  • 管道分为命名管道和匿名管道
     ps auxf | grep mysql
  • 上面命令行里的「|」竖线就是一个管道,它的功能是将前一个命令ps auxf)的输出,作为后一个命令grep mysql)的输入,从这功能描述,可以看出管道传输数据是单向的,如果想相互通信,我们需要创建两个管道才行。
  •  同时,我们得知上面这种管道是没有名字,所以「|」表示的管道称为匿名管道,用完了就销毁。
  • 管道还有另外一个类型是命名管道,也被叫做 FIFO,因为数据是先进先出的传输方式
  • 在使用命名管道前,先需要通过 mkfifo 命令来创建,并且指定管道名字
$ mkfifo myPipe

        myPipe 就是这个管道的名称,基于 Linux 一切皆文件的理念,所以管道也是以文件的方式存在,我们可以用 ls 看一下,这个文件的类型是 p,也就是 pipe(管道) 的意思:

$ ls -l
prw-r--r--. 1 root    root         0 Jul 17 02:45 myPipe

接下来,我们往 myPipe 这个管道写入数据:

$ echo "hello" > myPipe  // 将数据写进管道
                         // 停住了 ...

        你操作了后,你会发现命令执行后就停在这了,这是因为管道里的内容没有被读取,只有当管道里的数据被读完后,命令才可以正常退出。
        于是,我们执行另外一个命令来读取这个管道里的数据:

$ cat < myPipe  // 读取管道里的数据
hello

        可以看到,管道里的内容被读取出来了,并打印在了终端上,另外一方面,echo 那个命令也正常退出了。
        我们可以看出,管道这种通信方式效率低,不适合进程间频繁地交换数据。当然,它的好处,自然就是简单,同时也我们很容易得知管道里的数据已经被另一个进程读取了。

        那管道如何创建呢,背后原理是什么?

        匿名管道的创建,需要通过下面这个系统调用:

int pipe(int fd[2])

         这里表示创建一个匿名管道,并返回了两个描述符,一个是管道的读取端描述符 fd[0],另一个是管道的写入端描述符 fd[1]。注意,这个匿名管道是特殊的文件,只存在于内存,不存于文件系统中。

        其实,所谓的管道,就是内核里面的一串缓存。管道的一段写入的数据,实际上是缓存在内核中的,另一端读取,也就是从内核中读取这段数据。另外,管道传输的数据是无格式的流且大小受限。
        看到这,你可能会有疑问了,这两个描述符都是在一个进程里面,并没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值