什么是IPC,如何进行进程间通信;正向代理,反向代理 ;什么是粘包
什么是IPC,如何进行进程间通信
# 线程间通信:https://zhuanlan.zhihu.com/p/489305763
-共享内存(共享变量)---》线程间变量是共享的---》lock---》临界区---》数据错乱---》互斥锁---》死锁问题(科学家吃面)---》递归锁(可重入锁)---》各种各样的锁
-IPC:Inter-Process Communication,进程间通信
-两种情况:
-同一台机器上的两个进程通信
-不同机器上的两个进程进行通信
-如何通信:
-如果都是python写的,同一台机器上的进程可以用queue做进程间通信
-消息队列:redis就可以做消息队列,RabbitMQ,kafka
-socket套接字:展现形式:
1 服务和服务之间通过接口调用(http调用)
2 RPC调用:远程过程调用
3 socket客户端和服务端
正向代理,反向代理
什么是粘(nian)包
# 只存在于基于TCP协议的套接字编程中的现象
-因为TCP是流式协议,tcp客户端发送的多个数据包就会像水流一样流向TCP服务端,多个数据包就会'粘'在一起,区分不开是几个数据包,造成了粘包现象。
# 原因
1.缓冲区: 发送方将多个数据包写入缓冲区,而接收方并不总是能够立即读取缓冲区中的数据,这可能导致多个数据包一起发送给接收方。
2.优化: 操作系统或网络设备可能会对数据进行优化,将多个小的数据包合并为一个较大的数据包,从而提高传输效率。这可能导致接收方无法正确地分辨每个原始数据包。
3.并发: 在多线程或多进程的情况下,多个发送者同时发送数据,接收者可能会在接收数据时混淆数据包的边界。
# 解决方法
-1 每个包设置结束标志 http协议采用这种 /r/n/r/n
-2 每个包设置固定大小的头,头中包含包的大小