Liste des Groupes | Revenir à cl c |
On 5/1/2024 1:34 PM, Lawrence D'Oliveiro wrote:The global lock seems to work fine under light sporadic usage. However, when the server get under load, this mutex really messes things up.On Wed, 1 May 2024 10:59:16 +0200, Bonita Montero wrote:It can be if your thread synchronization scheme is sub par. I have actually seen code where an IOCP completion thread locks a global mutex. Something like this pseudo-code:
>Am 01.05.2024 um 10:53 schrieb Lawrence D'Oliveiro:>
>On Wed, 1 May 2024 10:13:03 +0200, Bonita Montero wrote:>
>Am 01.05.2024 um 09:10 schrieb Lawrence D'Oliveiro:>
>On Wed, 1 May 2024 06:54:13 +0200, Bonita Montero wrote:>
>Boost.ASIO does that all for you with a convenient interface.>
If enabled it even uses io_uring or the Windows' pendant.
How many languages does it support?
Just C++ ...
Not much use, then.
System-level programming is mostly made with C++.
No, it is actually mostly C, with Rust making inroads these days.
>
And you don’t have to be doing “system-level” programming to be needing
event-driven paradigms.
>>But functions and classes are not first-class objects in C++, ...>
Of course, since C++11.
No they aren’t. You cannot easily define a C++ function that returns a
general function or class as a result, just for example.
>>You cannot define function factories and class factories, like you can>
in Python.
Python is nothing for me since it is extremely slow.
Remember, we’re talking about maximizing I/O throughput here, so CPU is
not the bottleneck.
_________________
for (;;)
{
iocp_overlapped& p = GQCS(INFINITE);
lock_mutex(global);
// process event...
unlock_mutex(global);
}
_________________
This is really BAD! It will create a rather massive bottleneck under times of heavy load...
Also, it creates a nasty condition where things can become deadlocked if processing the overlapped completion calls into unknown user code to do some work. I have had to debug some others code like this before. Not exactly fun...
Les messages affichés proviennent d'usenet.