c#socket多线程与数据库同时读写的连接问题

c#socket多线程与数据库同时读写的连接问题,第1张

加个判断

if (SqlHelper.connection.State == System.Data.ConnectionState.Closed)

SqlHelper.connection.Open()

else  (SqlHelper.connection.State == System.Data.ConnectionState.Broken)

{

SqlHelper.connection.Close()

SqlHelper.connection.Open()

}

线程并不能提高执行效率,相反,由于多了线程切换,会有一丁点额外开销

多线程能提高交互和响应效率。

原因是cpu只能一条一条指令的做。

如果是多核编程或多处理器编程,那就肯定能快了。

1:socket句柄就是一个整型,是映射到系统句柄队列里面(你可以认为这个值是一个key,一个key对应一个系统的具体socket结构体),指针是无意义的,比方你创建了一个socket句柄值是10,你直接使用10在任何线程都是调用这个socket,这个映射过程是socket相关api内部完成的,是全局的。

2:多个线程共用一个socket分别处理收发是可以的,很多这样的例子,一些网络IO模型就是一个部分线程负责收数据包,部分线程负责发响应包,但不要多个线程共用一个socket来收,这样会导致问题。

3:你要多线程共享socket句柄,直接传值就行了,不要传引用和指针,不过注意socket关闭的同步处理。最好用一个对象来统一处理每个socket的打开和关闭,读取和发送。所有线程拿着这个对象来 *** 作socket,这样socket的有效性判断都在对象里面处理。不然一个线程关闭了socket,子线程不知道继续拿着这个句柄号在 *** 作就会出问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6699713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存