내 소켓에 C# 비동기식 io 모델을 사용하고 싶습니다. 소켓을 통해 전송해야하는 스레드가 여러 개 있습니다 ( ). 이것을 처리하는 가장 좋은 방법은 무엇입니까? 잠금으로 제어되는 액세스 권한이있는 N 개의 소켓 풀? 또는 asynch가 단일 소켓에 액세스하는 다중 스레드에 대해 thread-safe 을 전송합니까?여러 스레드에서 액세스하는 C# 비동기 소켓
THanks!
바로 잭
내 소켓에 C# 비동기식 io 모델을 사용하고 싶습니다. 소켓을 통해 전송해야하는 스레드가 여러 개 있습니다 ( ). 이것을 처리하는 가장 좋은 방법은 무엇입니까? 잠금으로 제어되는 액세스 권한이있는 N 개의 소켓 풀? 또는 asynch가 단일 소켓에 액세스하는 다중 스레드에 대해 thread-safe 을 전송합니까?여러 스레드에서 액세스하는 C# 비동기 소켓
THanks!
바로 잭
비동기 방법은 이미 데이터를 전송하기 위해 새로운 스레드를 만들 동기화 및 경주 조건에서 편리하게 무언가이다. 이렇게하면 응용 프로그램에 불필요한 오버 헤드가 추가 될 수 있습니다. 이미 여러 개의 스레드가있는 경우 소켓에 대한 액세스를 나타내는 IDispoable 유형의 객체와 소켓에 대한 체크인 및 체크 아웃을 제어하는 관리자를 만들 수 있습니다. IDisposable dispose 메서드가 호출되면 소켓 자체가 체크인됩니다. 이 방법으로 스레드가 소켓에서 수행 할 수있는 메소드를 제어 할 수 있습니다. 소켓이 이미 다른 스레드에 의해 체크 아웃 된 경우 관리자는 사용 가능할 때까지 단순히 차단합니다.
using (SharedSocket socket = SocketManager.GetSocket())
{
//do things with socket
}
System.Threading.Semaphore
는
http://www.albahari.com/threading/ 최상의 스레딩 솔루션을 찾으려고 할 때 편리합니다. – Patrick
따라야 할 프로토콜이 있습니까? 스트림을 순차적으로 전송해야합니까? – Patrick
고마워, 패트릭. 알바 하리가 유용 해 보입니다. 소켓을 사용하여 원격 서버에서 값을 설정하고 가져옵니다. 비동기 소켓 io 찾고 있는데,하지만 그것은 시스템 스레드 풀을 사용하는 이해합니다. 그래서 나는 – Jacko