-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!news.chmurka.net!.POSTED!not-for-mail
From: Andrzej Jarzabek <a...@g...com>
Newsgroups: pl.comp.programming
Subject: Re: Wielowątkowość - podstawowe pytanie
Date: Sat, 24 May 2014 14:41:38 +0100
Organization: news.chmurka.net
Lines: 47
Message-ID: <llq7i2$3c4$1@srv.chmurka.net>
References: <5...@g...com>
NNTP-Posting-Host: 90.217.191.199
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: srv.chmurka.net 1400938884 3460 90.217.191.199 (24 May 2014 13:41:24 GMT)
X-Complaints-To: abuse-news.(at).chmurka.net
NNTP-Posting-Date: Sat, 24 May 2014 13:41:24 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101
Thunderbird/24.5.0
In-Reply-To: <5...@g...com>
X-Authenticated-User: ajarzabek
Xref: news-archive.icm.edu.pl pl.comp.programming:205814
[ ukryj nagłówki ]On 24/05/2014 12:29, Piotrek wrote:
> Wyjaśnijcie mi taką jedną rzecz. Niby mam ogólne,
> teoretyczne pojęcie o wielowątkowości - wiem z czym
> to się je, jakie problemy wiążą się z programowaniem
> wielowątkowym, ale zawsze zastanawiała mnie taka jedna
> fundamentalna kwestia: dlaczego programiści w ogóle muszą
> być świadomi tego, że programują wielowątkowo, tzn. dlaczego
> samodzielnie muszą używać muteksów i innych mechanizmów
> synchronizacji wątków? Może bredzę, ale nie dałoby się tego
> jakoś rozwiązać na poziomie samego języka? Dlaczego każda
> instrukcja programu nie jest domyślnie atomowa, tzn. kompilator
> przy generowaniu kodu sam nie emuluje atomowości
> wstawiając gdzie trzeba różne locki/unlocki tak, żeby
> w ogóle nie trzeba było o tym myśleć? Chodzi o to, że
> byłoby to niewydajne?
W Erlangu, Haskellu czy Go możesz spokojnie pisać programy wykonujące
się na wielu wątkach bez żadnego grzebania w lockach.
Jeśli chodzi konkretnie o programowanie imperatywne z dzieleniem stanu,
to również istnieją biblioteki pozwalające na ominięcie problemu jawnego
używania locków, ale oczywiście samo użycie nie gwarantuje braku data
races w programie. To, co proponujesz rzeczywiście byłoby niewydajne -
nawet tam, gdzie architektura gwarantuje atomowość pewnych operacji (np.
zapisu lub odczytu słowa maszynowego) optymalizacje procesora powodują
że poszczególne atomowe operacje mogą być widoczne w różnej kolejności z
różnych wątków. O większych operacjach, gdzie kompilator musiałby
zakładać locka za każdym razem, kiedy instrukcja języka przekłada się na
więcej niż jedną instrukcję procesora już lepiej nie mówić. Przede
wszystkim jednak nie rozwiązuje to problemu: kompilator nadal nie wie,
co jest atomową instrukcją z punktu widzenia semantyki twojego programu.
Wyobraź sobie np. że masz taką strukturę jak lista dwukierunkowa.
Operacje jak wstawienie czy usunięcie elementu wymagają kilku operacji
odczytania i zapisania wskaźników. Nawet jeśli każda z tym operacji na
wskaźnikach jest atomowa, a nawet jeśli kompilator zadbał żeby np.
skopiowanie wartości wskaźnika było atomową operacją, to nadal (jeśli
nie zaznaczysz tego jakoś w programie) kompilator nie ma podstaw żeby
uważać, że tych kilka kopiowań wskaźników jest również operacją atomową
- to ty wiesz, że implementujesz listę dwukierunkową, kompilator tego
nie wie. I oczywiście jeśli same kopiowania są atomowe, ale całe
wstawienie/usunięcie elementu nie jest, to masz data race: co by się
działo jakby w połowie wstawiania elementu do listy przez jeden wątek
drugi postanowił wykonać inną operację - np. usunąć poprzedzający
element? Oczywiście tak w ogóle da się zdefiniować listę z zaznaczeniem
co jest atomową operacją bez jawnego używania locków - poczytaj sobie
np. o monitorach.
Następne wpisy z tego wątku
- 24.05.14 19:20 Stachu 'Dozzie' K.
- 24.05.14 20:43 A.L.
- 25.05.14 01:34 firr
- 25.05.14 03:10 firr
- 25.05.14 07:00 slawek
- 25.05.14 08:39 Edek
- 27.05.14 10:52 Adam Wysocki
- 04.06.14 19:59 Piotrek
- 04.06.14 20:02 Edek
- 04.06.14 21:10 Piotrek
- 04.06.14 22:19 Edek
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-08 Router LTE z możliwością zmian MTU
- 2025-07-08 Re: Pożar w Ząbkach a polscy dyletanci
- 2025-07-08 Trójmiasto => Head of Social Media <=
- 2025-07-08 Warszawa => MENA New Business Manager <=
- 2025-07-08 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-08 Warszawa => Customer Service with Spanish + translation <=
- 2025-07-08 Warszawa => Senior Account Manager <=
- 2025-07-08 Parkometry bez podstawy prawnej
- 2025-07-07 Re: Ząbki się spaliły jak wiejskie, drewniane stodoły sprzed 50 lat
- 2025-07-06 Kup szybko nową ładowarkę do smartfona
- 2025-07-07 TV z Play (dawniej UPC) -- potrzebny dekoder?
- 2025-07-06 Kup szybko nową ładowarkę do smartfona
- 2025-07-07 mija rok jeżdzenia po lewej
- 2025-07-06 Elektryki jednak są NIEBEZPIECZNE
- 2025-07-08 Fajny film widziałem...