公司电脑不让用IM工具聊天?50行代码写个聊天室

上周我看了你发的这个聊天室代码。
2 02 3 年3 月2 8 日。

server.py 这边是主机端。
客户端是 client.py。

我用电脑测试过。
在Windows上跑的。

服务器端开了个8 8 8 8 端口。
客户端自动找这个端口连接。

我输入"Hi" 发过去。
那边能收到"Hi"。

核心功能是TCP通信。
用了socket库。

服务器先bind再listen。
客户端直接connect。

我那边循环recv。
你那边循环send。

输入"Quit" 就退了。
很简单。

代码确实只有3 8 行。
不算多。

不过我那个朋友说。
要是多线程处理。
就能同时跟很多人聊了。

算了。
这个版本够用了。
你看着办。

哪些软件用到了多线程,如何使用的

多线程提升效率,I/O密集任务用线程池。
Java Swing后台任务,用SwingWorker防冻结。
Python网络请求,线程池并行请求快。
邮件发送异步,减少用户等待。
Java线程池,动态调整线程数。
Python asyncio,处理异步I/O。
数据汇总,线程池并发调用微服务。
线程创建,Java Thread类,Python threading.Thread。
同步,锁或原子类防竞态。
异步编程,CompletableFuture或asyncio。
多线程关键,任务分配和阻塞隔离。
你自己掂量。

Python queue模块全攻略

嗯... queue模块啊... 这玩意儿... 在Python里头... 多线程编程... 非常有用...
你想啊... 多个线程同时跑... 要是去抢同一个数据... 可能就出问题了... 数据乱七八糟的... 或者干脆就没了... 这叫竞争条件...
队列呢... 就是个管事儿的老大... 它保证... 大家按规矩来... 先来先得... 或者后进先出... 不会乱...
你看... queue模块... 提供了三种队列...
第一个... Queue... 就是普通的... 先进先出... 像超市排队买饭... 队头进去... 队尾出来...
这个Queue... 默认啊... 是没有上限的... 可以无限加... 但你也可以指定个最大值... 比如... 2 02 2 年... 我在一个项目中... 用过Queue... 设置了maxsize=1 0... 队列满了... 再放东西... 就会等着... 或者你设置超时... 超时了就报错...
第二个... LifoQueue... 后进先出... 就像你的购物车... 最后加进去的商品... 先拿出来...
这个... 用的场景少点... 但比如... 撤销操作... 按下 Ctrl+Z... 就是后进先出...
第三个... PriorityQueue... 优先级队列... 这个... 元素放进去... 要带个优先级... 优先级高的... 先拿出来...
比如... 你有任务... 有的紧急... 有的不紧急... 紧急的优先级高... 就用PriorityQueue... 2 02 3 年... 我在一个抢购活动中... 用过这个... 把订单按金额... 设置优先级... 高金额的先处理...
核心方法呢...
put... 就是往里放东西... 队列满了... 可以等着... 也可以等一会儿... 等不到了... 就报错...
get... 是从队列里拿东西... 队列为空... 可以等着... 也可以等一会儿... 等不到了... 也报错...
task_done... 这个... 是用来标记... 任务干完了... 通常... 你在一个生产者消费者模型里... 消费者拿走一个东西... 就调用一次task_done...
join... 是主线程调用... 主线程会等着... 等所有task_done被调用... 才继续往下跑...
你看... 示例里... 生产者... 往里放数字... 消费者... 从里拿数字... 拿完了... task_done... 主线程join... 等大家都干完了...
高级用法...
第一个... 有界队列... 防止内存溢出... 就是设置maxsize...
第二个... 超时处理... get的时候... 可以设置timeout... 等一会儿... 等不到就报错...
第三个... 优先级队列... 可以自定义排序... 比如按元组的第一个元素...
注意事项...
第一个... 避免死锁... task_done必须被调用... 否则join会卡死... 永远等不到...
第二个... 性能权衡... 这个东西... 用锁... 高频操作... 可能会慢一点...
第三个... 替代方案... 简单的... 可以用collections.deque... 加个锁... 但queue模块... 更标准... 更可靠...
总结一下...
就是... queue模块... 多线程编程... 大有用处... 线程安全... 不用自己操心...
选对队列类型... FIFO... LIFO... 优先级... 用对put... get... task_done... join...
可以高效实现... 生产者消费者... 这类并发模式...
嗯... 就这样...