目录
1.TCP和UDP的区别
2.进程和线程的区别
3.进程间的通信(Scoket)
4. 线程之间通信:
1.互斥锁
2.读写锁
3.条件变量
4.信号量
TCP是面向连接的协议,提供的是可靠传输,在收发数据前需要通过三次握手建立连接,
使用ACK对收发的数据进行正确性检验。如果数据丢失,就会自定重传。
而UDP是无连接的协议,不管对方有没有收到或者收到的数据是否正确。
TCP提供流量控制和拥塞控制,而UDP没有。
TCP对系统资源的要求高于UDP,所以速度也比UDP慢。
所以在应用方面,如果强调数据的完整性和正确性用TCP,当要求性能和速度的时候,使用UDP更加合适。
注:单凭TCP是不能保证完整性的,要是有黑客伪造TCP包,是无法识别的。
(6) TCP和UDP相关的协议与端口号
TCP族的协议有HTTP,HTTPS,SMTP,TelNet,FTP等,UDP族的协议有DNS,DHCP等等。
并发:指两个或多个事件在同⼀个时间段内发⽣。
并⾏:指两个或多个事件在同⼀时刻发⽣(同时发⽣)。
在操作系统中,安装了多个程序,并发指的是在⼀段时间内宏观上有多个程序同时运⾏,这在单 CPU 系统中,每⼀时刻只能有⼀道程序执⾏,即微观上这些程序是分时的交替运⾏,只不过是给⼈的感觉是同时运 ⾏,那是因为分时交替运⾏的时间是⾮常短的。
⽽在多个 CPU 系统中,则这些可以并发执⾏的程序便可以分配到多个处理器上( CPU ),实现多任务并⾏ 执⾏,即利⽤每个处理器来处理⼀个可以并发执⾏的程序,这样多个程序便可以同时执⾏。⽬前电脑市场 上说的多核 CPU ,便是多核处理器,核 越多,并⾏处理的程序越多,能⼤⼤的提⾼电脑运⾏的效率。
注意:单核处理器的计算机肯定是不能并⾏的处理多个任务的,只能是多个任务在单个 CPU 上并发运 ⾏。同理 , 线程也是⼀样的,从宏观⻆度上理解线程是并⾏运⾏的,但是从微观⻆度上分析却是串⾏ 运⾏的,即⼀个线程⼀个线程的去运⾏,当系统只有⼀个 CPU 时,线程会以某种顺序执⾏多个线程, 我们把这种情况称之为线程调度。
进程是系统进行资源分配和调度的基本单元,而线程是进程的子任务,是最小的执行单位,是CPU分配和调度的基本单元;
一个进程可以有多个线程,一个线程只能属于一个进程
进程之间不会相互影响,多线程间如果一个线程崩溃可能会造成多个线程崩溃
进程有独立的地址空间,线程共享一个地址空间
多个线程独享栈区,共享代码区、堆区和全局区
假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,互不干扰,各自执行各自的,这就是多线程并发。
IP地址是计算机在网络中的地址,是计算机的身份标识
IPV4 4个字节 2的32次方和IPV6 16个字节 2的126次方
套接字
介绍;windows 需要加载套接字库然后释放资源,linux则不需要
一次性检测的客户端请求;
客户端:
socket套接字创建之后通过connect函数进行初始化,这样就知道如何连接服务器,指定服务器的IP地址和端口,就是服务器函数bind()绑定的IP地址和端口
connect函数会位客户端随机生成一个没有被占用的IP地址和端口
服务器:
socket套接字创建之后
bind()绑定IP地址和端口 用add_any函数可以自动识别主机地址
listen监听(文件描述符,最多128个请求)
阻塞并等待客户端的连接accept
接收数据用recv函数判断接受到的数据是否为0
客户端send recive 阻塞 是读写缓冲区写满了
服务器send receive阻塞是读写缓冲区无数据 无数据一直阻塞
多线程进行工作时,是分时复用CPU的时间片,哪个线程抢到了,谁就执行
pthread_mutex_init 对互斥锁进行初始化,用restrict来修饰指针,指向互斥锁变量的地址,只有关键字修饰的指针可以访问内存地址,
p_thread_t p;
pthread_rwlock_t p1;
pthread_rwlock_init(&p1,null);
条件变量是用来阻塞线程,多线程中条件变量需要配合互斥锁,才能实现线程的同步
条件变量是只有满足条件才会阻塞线程,主要用来生产者、消费者模型,
生产者-若干线程 消费者-若干线程 任务队列-数组链表stl容器各种数据结构
pthread_cond_initI()
pthread_cond_destroty
pthread_cond_wait() //线程阻塞函数 pthread_cond_timewait() //阻塞一定时间
pthread_cond_signal() //唤醒条件变量上的线程pthread_cond_broadcast //唤醒所有线程
信号量是用于多线程任务同步的,生产者消费者模型,用于阻塞线程,
一个线程完成某个动作通过信号量告诉别的线程,别的线程再继续别的动作。
指定最大资源数,