What is the point of WriteOptions::set_buffer_hint() then? If only one 
write can be outstanding anyway, then I cannot simply fill-up the socket 
buffer for WriteOptions::set_buffer_hint()  to work, because the second 
write can only happen after the first write has been committed and then 
*acked *the event queue! This must definitely affect throughput as it is 
not at-par to just keep pushing data to socket write buffer. *I do one 
write, then wait for the event loop to tells me "ok your write is 
committed, you can do another one"*. This is inherently slow by design due 
to overcommunication for writing messages.

On Friday, May 29, 2020 at 12:32:31 AM UTC+1, yas...@google.com wrote:
>
> Hi,
>
> From what I understand, it seems that you are getting bottlenecked by the 
> network. You are right that gRPC allows only one outstanding write at any 
> given time but that decision itself probably won't affect the throughput 
> much. If the application does not buffer the messages, it would instead 
> need to buffered by gRPC and the end performance would remain about the 
> same.
>
> On Monday, May 18, 2020 at 5:41:17 AM UTC-7 igor.ber...@gmail.com wrote:
>
>> Hi all,
>>
>> I've trying to implement a high-performance async server in C++ where 
>> throughput matters, but also don't want to keep messages too long in a 
>> buffer (say up to 200ms). 
>> WriteOptions::set_buffer_hint() seems like a perfect candidate to enable 
>> high throughput. However whenever a Write method is called on 
>> ServerAsyncReaderWriter, then it just gets blocked, because it gets 
>> buffered! But then ironically I cannot call another Write method, because 
>> GRPC API demands another Write to be only called after another successful 
>> Write has completed. How then is supposed to work if async buffered Write 
>> does not commit the write right away, but then I cannot call Write method 
>> in a batch as well? Am I getting this wrong somehow? I appreciate any help.
>>
>> void grpc_impl::ServerAsyncReaderWriter 
>> <https://grpc.github.io/grpc/cpp/classgrpc__impl_1_1_server_async_reader_writer.html><
>>  
>> W, R >::Write ( const W &  msg,
>> ::grpc::WriteOptions 
>> <https://grpc.github.io/grpc/cpp/classgrpc_1_1_write_options.html>  
>> options,
>> void *  tag 
>> ) inlineoverridevirtual
>>
>> Request the writing of *msg* using WriteOptions *options* with 
>> identifying tag *tag*.
>>
>> *Only one write may be outstanding at any given time. This means that 
>> after calling Write, one must wait to receive tag from the completion queue 
>> BEFORE calling Write again*. WriteOptions *options* is used to set the 
>> write options of this message
>>
>> Kind Regards,
>>  Igor
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/6359d741-c1ac-479d-9474-37711ee4a011%40googlegroups.com.

Reply via email to