linux 多线程的实现

转载于:https://www.cnblogs.com/chenjiahe/p/6268853.html

 

#!/bin/bash
start=`date +%s` #定义脚本运行的开始时间
 
for ((i=1;i<=1000;i++))
do
{
        sleep 1  #sleep 1用来模仿执行一条命令需要花费的时间(可以用真实命令来代替)
        echo 'success'$i; 
 }&              #用{}把循环体括起来,后加一个&符号,代表每次循环都把命令放入后台运行
                 #一旦放入后台,就意味着{}里面的命令交给操作系统的一个线程处理了
                 #循环了1000次,就有1000个&把任务放入后台,操作系统会并发1000个线程来处理
                 #这些任务         
done    
wait             #wait命令的意思是,等待(wait命令)上面的命令(放入后台的)都执行完毕了再
                 #往下执行。
                 #在这里写wait是因为,一条命令一旦被放入后台后,这条任务就交给了操作系统
                 #shell脚本会继续往下运行(也就是说:shell脚本里面一旦碰到&符号就只管把它
                 #前面的命令放入后台就算完成任务了,具体执行交给操作系统去做,脚本会继续
                 #往下执行),所以要在这个位置加上wait命令,等待操作系统执行完所有后台命令
end=`date +%s`  #定义脚本运行的结束时间
 
echo "TIME:`expr $end - $start`"

Linux环境下实现一个多线程聊天室,通常会涉及到socket编程、线程管理和消息队列等技术。以下是一个简化的步骤概述: 1. **服务器端**: - 创建套接字(socket),监听特定的端口。 - 使用`listen()`函数设置套接字为监听模式。 - 通过`accept()`创建新的连接,并为每个客户端启动一个新的线程处理请求。 ```c #include <sys/socket.h> ... int server_socket, client_socket; struct sockaddr_in server_addr, client_addr; ... void* thread_handler(void* arg) { // 在这里处理新连接,读取客户端消息并发送回客户端 } ``` 2. **线程处理**: - 每个新进来的客户端连接都会对应一个新线程,每个线程负责读取数据、解析消息、入到消息队列,然后调度其他线程向所有在线用户广播。 3. **消息队列**: - 可能会使用`pthread_joinable_queue`或者其他线程安全的数据结构,存储待发送的消息,确保消息按顺序传递给各个客户端。 4. **消息发送**: - 定期循环检查消息队列,如果有新的消息,就从队列取出并发送到相应的客户端。 5. **客户端连接和断开**: - 客户端也需要建立一个连接,发送用户名或其他标识信息,并接收来自服务器的消息。 6. **错误处理**: - 确保捕获并处理可能出现的网络错误、内存泄漏等异常情况。 这只是一个基础的框架,实际的代码会更复杂,需要考虑并发控制、异常处理以及性能优化等问题。如果你对特定语言如C/C++有需求,我可以给出一个简化版的基本代码片段,但完整的实现还需要根据实际需求进行调整。下面是一个简单的server部分示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> typedef struct ThreadData { int client_sock; } ThreadData; void* chat_thread(void* data) { ThreadData* td = (ThreadData*)data; char buffer[1024]; // ... 读取、处理消息逻辑 ... } int main() { int server_sock, port; ... // 设置服务器地址和端口 ... listen(server_sock, 5); while(1) { ThreadData td; td.client_sock = accept(server_sock, NULL, NULL); pthread_create(&thread_id, NULL, chat_thread, &td); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒马coding

你的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值