C# socket服务器端 多线程客户端 如何少量使用CPU
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# socket服务器端 多线程客户端 如何少量使用CPU相关的知识,希望对你有一定的参考价值。
C# socket服务器端 多线程客户端 使用了 while来接收客户端连接 连接成功后 开启另一个线程 使用while循环来接收socket消息 当开启两个线程后服务端 占用CPU特高 基本无法操作
参考技术A 1)开启的线程设置为后台线程Thread t = new Thread(你的线程函数);
t.IsBackground = true
2)建议你利用socket提供的异步回调 socket.BeginXXXXX() socket.EndXXXX 来实现多线程处理
-----------
利用异步回调最大的好处是:(1)可以充分利用.net framework 的线程池中I/O线程,最大限度降低CPU处理开销。曾经做过处理1000多个socket TCP客户端连接的程序,双核CPU平均占用不超过12%(2)网络通信过程各种异常是不可避免的,异步编程结构很容易实现异常处理。本回答被提问者和网友采纳 参考技术B 如果是短连接,数据接收完整立即释放socket,如果长连接就用异步socket 参考技术C 33333333333 参考技术D 异步调用。
socket 编程中。 服务端用到多线程
客户端连接服务端之后, 服务端会生成与客户端交换信息的socket。
在服务端实现多线程: 为每个连接创建一个线程进行信息交换。
import threading from socket import * from time import ctime HOST=‘127.0.0.1‘ PORT = 1111 BUFSIZE= 1024 ADDR = (HOST,PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(4) class MyThread(threading.Thread): def __init__(self, tcp_client): threading.Thread.__init__(self) self.clientSocket = tcp_client def run(self): while True: data = self.clientSocket.recv(1024) print data if not data: break self.clientSocket.send(‘[%s] %s‘ % (ctime(), data)) if data == None: tcpCliSock.close() while True: print ‘waiting for connection...‘ tcpCliSock, addr = tcpSerSock.accept() print ‘...connection from:‘, addr MyThread(tcpCliSock).start() tcpSerSock.close()
以上是关于C# socket服务器端 多线程客户端 如何少量使用CPU的主要内容,如果未能解决你的问题,请参考以下文章