Socket server + thread: cpu usage
Damian Day via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Apr 30 16:24:19 PDT 2014
On Tuesday, 29 April 2014 at 17:44:21 UTC, Tim wrote:
> On Tuesday, 29 April 2014 at 17:35:08 UTC, Tim wrote:
>> On Tuesday, 29 April 2014 at 17:19:41 UTC, Adam D. Ruppe wrote:
>>> On Tuesday, 29 April 2014 at 17:16:33 UTC, Tim wrote:
>>>> Is there anything I'm doing wrong?
>>>
>>> You should be using a blocking socket. With them, the
>>> operating system will put your thread on hold until a new
>>> connection comes in. Without them, it will endlessly loop
>>> doing absolutely nothing except checking if a new connection
>>> is there yet. Horribly, horribly inefficient.
>>
>> Alright, this would solve the server-cpu-usage-problem. But
>> what about incoming connections? When I create a new thread
>> and use non-blocking socket I've exactly the same problem. I
>> can also solve this problem by using blocking sockets, but
>> what happens if I do the following:
>>
>> while(oMyBlockingSocket.isAlive)
>> {
>> oMyBlockingSocket.receive(...);
>> }
>>
>> ... and close the connection on the client side? I would never
>> receive anything and receive() waits never comes back or would
>> this throw an exception or similar?
>
> Sorry... I totally forgot... I can use SocketSet's as I already
> asked:
> http://forum.dlang.org/thread/ogghezngzrvvoqaoddbh@forum.dlang.org#post-kivp3e:24jif:241:40digitalmars.com
>
> ... but I thought it's also possible using non blocking sockets
> by using Thread.yield().
You want to add something like this to your while loop:
Thread.sleep( dur!("msecs")( 20 ) );
That will give back some time to the CPU.
More information about the Digitalmars-d-learn
mailing list