进程和线程通信

目录

1.TCP和UDP的区别

2.进程和线程的区别

3.进程间的通信(Scoket)

4. 线程之间通信:

1.互斥锁

 2.读写锁

3.条件变量

4.信号量


1.TCP和UDP的区别

TCP是面向连接的协议,提供的是可靠传输,在收发数据前需要通过三次握手建立连接,

使用ACK对收发的数据进行正确性检验。如果数据丢失,就会自定重传。

而UDP是无连接的协议,不管对方有没有收到或者收到的数据是否正确。
TCP提供流量控制和拥塞控制,而UDP没有。
TCP对系统资源的要求高于UDP,所以速度也比UDP慢。

所以在应用方面,如果强调数据的完整性和正确性用TCP,当要求性能和速度的时候,使用UDP更加合适。
注:单凭TCP是不能保证完整性的,要是有黑客伪造TCP包,是无法识别的。

(6) TCP和UDP相关的协议与端口号
TCP族的协议有HTTP,HTTPS,SMTP,TelNet,FTP等,UDP族的协议有DNS,DHCP等等。

2.进程和线程的区别

2.1 并发与并⾏


并发:指两个或多个事件在同⼀个时间段内发⽣。
并⾏:指两个或多个事件在同⼀时刻发⽣(同时发⽣)。


在操作系统中,安装了多个程序,并发指的是在⼀段时间内宏观上有多个程序同时运⾏,这在单 CPU 系统中,每⼀时刻只能有⼀道程序执⾏,即微观上这些程序是分时的交替运⾏,只不过是给⼈的感觉是同时运 ⾏,那是因为分时交替运⾏的时间是⾮常短的。
⽽在多个 CPU 系统中,则这些可以并发执⾏的程序便可以分配到多个处理器上( CPU ),实现多任务并⾏ 执⾏,即利⽤每个处理器来处理⼀个可以并发执⾏的程序,这样多个程序便可以同时执⾏。⽬前电脑市场 上说的多核 CPU ,便是多核处理器,核 越多,并⾏处理的程序越多,能⼤⼤的提⾼电脑运⾏的效率。
注意:单核处理器的计算机肯定是不能并⾏的处理多个任务的,只能是多个任务在单个 CPU 上并发运 ⾏。同理 , 线程也是⼀样的,从宏观⻆度上理解线程是并⾏运⾏的,但是从微观⻆度上分析却是串⾏ 运⾏的,即⼀个线程⼀个线程的去运⾏,当系统只有⼀个 CPU 时,线程会以某种顺序执⾏多个线程, 我们把这种情况称之为线程调度。

进程是系统进行资源分配和调度的基本单元,而线程是进程的子任务,是最小的执行单位,是CPU分配和调度的基本单元;

一个进程可以有多个线程,一个线程只能属于一个进程

进程之间不会相互影响,多线程间如果一个线程崩溃可能会造成多个线程崩溃

进程有独立的地址空间,线程共享一个地址空间

多个线程独享栈区,共享代码区、堆区和全局区

假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,互不干扰,各自执行各自的,这就是多线程并发。

        IP地址是计算机在网络中的地址,是计算机的身份标识

        IPV4    4个字节  2的32次方和IPV6  16个字节  2的126次方

3.进程间的通信(Scoket)

套接字

 介绍;windows 需要加载套接字库然后释放资源,linux则不需要

进程和线程通信_第1张图片

进程和线程通信_第2张图片

一次性检测的客户端请求;

客户端:

socket套接字创建之后通过connect函数进行初始化,这样就知道如何连接服务器,指定服务器的IP地址和端口,就是服务器函数bind()绑定的IP地址和端口 

connect函数会位客户端随机生成一个没有被占用的IP地址和端口

服务器:

socket套接字创建之后   

 bind()绑定IP地址和端口 用add_any函数可以自动识别主机地址

listen监听(文件描述符,最多128个请求)

阻塞并等待客户端的连接accept

接收数据用recv函数判断接受到的数据是否为0

进程和线程通信_第3张图片

进程和线程通信_第4张图片

进程和线程通信_第5张图片

 进程和线程通信_第6张图片

进程和线程通信_第7张图片

客户端send recive 阻塞 是读写缓冲区写满了   

服务器send  receive阻塞是读写缓冲区无数据   无数据一直阻塞

4. 线程之间通信:


多线程进行工作时,是分时复用CPU的时间片,哪个线程抢到了,谁就执行

  • 进程和线程通信_第8张图片

 进程和线程通信_第9张图片

进程和线程通信_第10张图片

1.互斥锁

进程和线程通信_第11张图片

进程和线程通信_第12张图片 pthread_mutex_init 对互斥锁进行初始化,用restrict来修饰指针,指向互斥锁变量的地址,只有关键字修饰的指针可以访问内存地址,

 进程和线程通信_第13张图片

 2.读写锁

进程和线程通信_第14张图片

 进程和线程通信_第15张图片

 进程和线程通信_第16张图片

进程和线程通信_第17张图片

p_thread_t  p;

pthread_rwlock_t   p1;   

pthread_rwlock_init(&p1,null);

3.条件变量

条件变量是用来阻塞线程,多线程中条件变量需要配合互斥锁,才能实现线程的同步

条件变量是只有满足条件才会阻塞线程,主要用来生产者、消费者模型,

生产者-若干线程   消费者-若干线程  任务队列-数组链表stl容器各种数据结构

进程和线程通信_第18张图片

 pthread_cond_initI()

pthread_cond_destroty

pthread_cond_wait()  //线程阻塞函数   pthread_cond_timewait() //阻塞一定时间

pthread_cond_signal() //唤醒条件变量上的线程pthread_cond_broadcast //唤醒所有线程

4.信号量

进程和线程通信_第19张图片

信号量是用于多线程任务同步的,生产者消费者模型,用于阻塞线程,

一个线程完成某个动作通过信号量告诉别的线程,别的线程再继续别的动作。 

进程和线程通信_第20张图片

指定最大资源数,

进程和线程通信_第21张图片

进程和线程通信_第22张图片

你可能感兴趣的:(udp,网络,tcp/ip)