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的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform 多线程 SOCKET 文件上传,下载

C# 1000个socket客户端并发

C# socket编程时 如何实现server端关闭了能提示Client端

socket 编程中。 服务端用到多线程

socket编程,简单多线程服务端测试程序

java socket一对多通信如何实现?