Second Round CURL Wrapper Review

Vladimir Panteleev vladimir at thecybershadow.net
Sat Dec 3 12:58:53 PST 2011


On Sat, 03 Dec 2011 21:17:25 +0200, Jonas Drewsen <jdrewsen at nospam.com>  
wrote:

> Den 03-12-2011 13:10, Vladimir Panteleev skrev:
>> On Sat, 03 Dec 2011 13:53:16 +0200, Jonas Drewsen <jdrewsen at nospam.com>
>> wrote:
>>
>>> As mentioned the async version performs the request in another thread
>>> leaving the main thread available for you to do something else. I'll
>>> clarify in the docs that it is when you actually call empty/front on
>>> the returned range you will get data from the other thread and may be
>>> blocking.
>>
>> I can't think of a realistic use case for the current asynchronous API.
>> Basically, all you can do is start a request in the background, but
>> you're neither notified of the request nor can you poll it to check its
>> status? So the only thing you CAN do is ask for a request that you will
>> need in the future, and when that future moment comes, block if
>> necessary to get the result?
>
> The standard example is downloading some content and saving it at the  
> same time.
>
> While your main thread saves a chunk to disk (or uploads to another  
> server) the async thread is busy buffering incoming chunks of data. This  
> means that you effectively only wait for the slowest of the two IO  
> operations. If you did it synchronously would worst case have to wait  
> for all everything to be downloaded and the wait for everything to be  
> saved or uploaded.
>
> foreach(chunk; byChunkAsync("www.abc.com/hugefile.bin"))
> {
>      // While writing to file in this thrad
>      // new chunks are downloaded
>      // in the background thread
>      file.write(chunk);
> }
>
> I hope this makes sense.

Well, this makes sense from a theoretical / high-level perspective, but OS  
write buffers greatly reduce the practicality of this. In common use cases  
the speed difference between disk and wire will differ by orders of  
magnitude as well.

-- 
Best regards,
  Vladimir                            mailto:vladimir at thecybershadow.net


More information about the Digitalmars-d mailing list