Co nowego w wielowątkowości w Delphi XE?

Widziałem jakiś czas temu ludzi dyskutujących o nowej wielowątkowości w Delphi XE oraz o tym, że Delphi ma pewne "natywne" problemy z powodu sposobu implementacji wielowątkowości. Zalecali też niektóre zewnętrzne biblioteki, aby zastąpić domyślną wielowątkowość Delphi.

Możesz mi wskazać jakąś dokumentację i najpopularniejszą bibliotekę wielowątkową dla Delphi XE? Dzięki

Author: Charles, 2011-10-11

6 answers

Uważam, że wszystkie nowo wprowadzone funkcje zostały już omówione.

Dla części dokumentacji, oto zarchiwizowana Kopia klasycznej książki samouczka Martin Harvey. Wielowątkowość-Sposób Delphi. Po przeczytaniu najprawdopodobniej zdasz sobie sprawę z tego, że nie ma realnej potrzeby tworzenia bibliotek (może poza pulą wątków), pamiętaj, że frameworki nie upraszczają dla Ciebie rzeczy, a także pozbawiają cię kontroli drobnoziarnistej.

 7
Author: Premature Optimization,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-11 19:19:45

[można ustawić nazwę wątku: TThread./ Align = "left" / ] (zaimplementowane w D2010 jak zauważył David)

Możesz utworzyć anonimowy wątek (wątek, który wykonuje funkcję anonimową i nie potrzebuje obiektu potomnego tthread): TThread.CreateAnonymousThread.

Delphi threading Framework są omówione tutaj:

 26
Author: gabr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:26

Oprócz tego, co już zostało wspomniane:

 14
Author: Ondrej Kelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-11 15:20:58

Myślę, że "natywne" kwestie, o których mówisz, nie są związane ze sposobem implementacji TThread, ale z innymi aspektami RTL:

  • Menedżer pamięci jest bardzo szybki i dobrze napisany, ale nie skaluje się w sposób liniowy, gdy działa z wieloma równoległymi wątkami na wielu rdzeniach;
  • typy zliczane odniesienia (takie jak string i tablice dynamiczne ) są zaimplementowane z kodem ASM lock, aby zliczać odniesienia atomowe (InterlockedDecrement / InterlockedIncrement w x64), który może również źle skalować w aplikacjach wielowątkowych (to znaczy, wszystkie rdzenie zawiesza się podczas wykonywania tego kodu-nawet jeśli nowsze Procesory poczyniły postępy w tym zakresie, implementacja RCU może skalować się lepiej).

Te słabości są wspólne dla wszystkich bibliotek wielowątkowych - nawet OTL ucierpi na tym . Istnieją one od bardzo wczesnych wersji Delphi i nadal istnieją z Delphi XE2. 64 bit implementacja jest podobna (jeszcze wolniejsza), a platforma Mac OS dzieli tę samą implementację.

Zobacz to drugie pytanie o to, jak pisać skalowanie wielowątkowych aplikacji w Delphi.

Szczerze mówiąc, oba powyższe punkty pojawią się tylko w niektórych bardzo specyficznych zastosowaniach.

Więc nie ma się czym martwić o wielowątkowość w Delphi, jeśli znasz te punkty i nie nadużywaj wywołań Menedżera pamięci lub procesu łańcuchowego w Twoim nici.

 12
Author: Arnaud Bouchez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:45

Gabr prawdopodobnie wspomniał o głównych nowych dodatkach. To, co pozostało, to prawdopodobnie nowe przeciążenia dla TThread.Synchronizuj i TThread.Kolejka, która może teraz wykonywać metody anonimowe.

 7
Author: Linas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-11 13:21:15

TThreadedQueue został wprowadzony w XE.

Uważam, że jest to przydatne do przekazywania informacji z wątków roboczych do wątku głównego lub innych wątków konsumenckich. Ostatnia część, mająca wiele wątków konsumenckich, była niestety błędna. Wystąpił błąd w TMonitor, klasie wprowadzonej przez Delphi 2009, używanej do synchronizacji dostępu do kolejki w TThreadedQueue.

To zostało ustalone dla XE2. Zobacz tthreadedqueue-not-capable-of-multiple-consumers

 4
Author: LU RD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:43