Czy mogę używać wszystkich 4 rdzeni procesora Raspberry Pi?

11

Zastanawiałem się, czy istnieje prosty sposób na „włączenie” całego 100% procesora, aby móc szybciej uruchamiać procesy (takie jak obliczenia w języku Python).

1) Czy to jest możliwe?

2) Czy istnieje prosty sposób na powrót do normalności?

3) Czy istnieje sposób na użycie mniejszej mocy procesora, jeśli jest to pożądane?

Mam na myśli interakcję z wiersza poleceń, taką jak:

pi@raspberry:~ $ sudo turnOnFourCores python run.py

NaN
źródło
1
Krótka odpowiedź brzmi: nie
Steve Robillard
16
Długa odpowiedź brzmi: „Gdyby to było takie proste, byłoby to ustawienie domyślne”
Shadow
18
Oba wasze komentarze wprowadzają w błąd i mogą sugerować, że Pi ma 4 rdzenie, ale zawsze używa 1. Lepszą odpowiedzią jest to, że wszystkie cztery rdzenie już włączone, ale Python (i każdy inny program, jeśli o to chodzi) będzie używał tylko więcej niż 1 rdzeń, chyba że są wielowątkowe. Python nadal może skutecznie blokować się przy użyciu jednego rdzenia, nawet przy wielowątkowości, ze względu na globalną blokadę interpretera, ale jest to nieco poza zakresem tego pytania.
Sohcahtoa82,
13
Aby to wyjaśnić, myślę, że OP ma nieporozumienie dotyczące działania procesorów wielordzeniowych, a twoje odpowiedzi tylko potwierdzają ich nieporozumienie.
Sohcahtoa82,
6
Najłatwiejszym sposobem na przyspieszenie działania programu Python jest ponowne napisanie w skompilowanym języku (lub przynajmniej sprawienie, by zadania o krytycznym czasie korzystały z modułu ac).
Milliways,

Odpowiedzi:

21

Domyślnie każdy komputer będzie próbował użyć wszystkich swoich rdzeni, kiedy będzie to możliwe. Można to jednak osiągnąć tylko wtedy, gdy aplikacja jest wielowątkowa. Jeśli tak nie jest (tzn. Skrypt w języku Python, który nie korzysta z threadingmodułu), może używać maksymalnie jednego rdzenia. Odpowiada to 25% procesora czterordzeniowego procesora. Jeśli chcesz zmodyfikować skrypt, aby używał wielu rdzeni, możesz podzielić swoje obliczenia na wiele części i wielowątkowo, jak pokazano w dokumentacji Pythona .

Aktualizacja:

Jak odpowiedział Anon , to nie zadziała bez współpracy z GIL Pythona (Global Interpreter Lock). Pozwala to na działanie zadań (pozornie) w tym samym czasie, ale nie pozwala na uruchamianie kodu na wielu rdzeniach. Jeśli używasz modułów napisanych w C (np. Numpy), mogą one pozwolić ci na użycie wielu rdzeni w celu obejścia tego ograniczenia. Dodatkowo, jeśli nie jest to opcja, Python oferuje wieloprocesorowanie , co pozwala na uruchomienie dowolnego zadania na wielu rdzeniach.

światła 0123
źródło
Aktualizacja - która jest poprawna - wyjaśnia, dlaczego pierwsza część odpowiedzi jest niepoprawna w odniesieniu do Pythona. Można obejść to ograniczenie tylko w Pythonie, pisząc moduły C lub jakiś skompilowany język. W tym momencie tak naprawdę nie piszesz już Pythona. Jeśli wydajność ma kluczowe znaczenie, przejście do skompilowanego języka jest właściwą odpowiedzią. (Wieloprzetwarzanie nie jest takie samo z punktu widzenia wykorzystania zasobów.)
Brick
4
@Brick Dla jasności, skompilowany język z pewnością nie jest wymagany do prawidłowego wielowątkowości w procesie. Heck, nawet GIL Pythona jest szczegółem implementacji (przyznane, dla popularnego CPython) - istnieją inne interpretery Pythona, które chętnie będą wielowątkowe, np. Jython i IronPython.
Bob
4
Dodając zamieszanie, Python jest kompilowany; w przypadku CPython kompiluje się do kodu bajtowego CPython, który jest uruchamiany na maszynie wirtualnej CPython. W przypadku Jython jest on kompilowany do kodu bajtowego Java, który jest uruchamiany w JVM. I wreszcie, IronPython kompiluje się do CIL, który jest ukierunkowany na środowisko uruchomieniowe .NET. Tak więc „chodzenie do skompilowanego języka” w celu wykonania nie ma
większego
każdy komputer będzie próbował użyć wszystkich swoich rdzeni, kiedy będzie to możliwe. Nie bardzo, użyje wszystkich swoich rdzeni (lub zrobi cokolwiek innego), kiedy zostanie im to nakazane . To rozróżnienie może wydawać się oczywiste, a nawet protekcjonalne dla doświadczonych, ale wydaje się, że OP musi docenić, że nie dzieje się to automatycznie.
nekomatic
13

Zastanawiałem się, czy istnieje prosty sposób na „włączenie” całego 100% procesora, aby móc szybciej uruchamiać procesy (takie jak obliczenia w języku Python).

Nie w tym sensie, że myślę, że sugerujesz. Nie jest to także problem specyficzny dla pi, jest to ograniczenie logiczne.

Wszystkie komputery same w sobie nie mają obecnie zbyt dużej pojemności, aby ustalić, że proces działający jako pojedynczy wątek można zamiast tego uruchomić równolegle. Zauważ, że w momencie, gdy mogliby mieć taką pojemność, nie byłoby potrzeby programistów komputerowych, ponieważ system komputerowy, który mógłby to zrobić, równie dobrze mógłby napisać swój własny kod 1 ..

Rozważ następujące proste wyrażenie matematyczne:

(4 + 2) * 17 / (3 + 6)

Istnieje pewien potencjał do obliczenia tego równolegle, ale jest to logicznie ograniczone. Powiedziałbym, że nie ma sensu więcej niż dwa wątki, a nawet wtedy będzie to tylko jeden:

#1 a) 4 + 2 b) 6 * 17 c) 102 / 9
#2 a) 3 + 6

Wątek nr 2 przyczynił się do obliczenia 3 + 6 = 9, wykorzystanego w kroku C przez wątek nr 1, zapisując go o jeden krok. Ale to tyle, o ile przydatne będzie paralelizm. Podczas gdy wątek nr 2 mógłby obliczyć 17/9, podczas gdy nr 1 robi 6 * 17, robienie tego byłoby bezcelowe, ponieważ masz teraz dwie różne ścieżki do tego samego celu, którego nie można zrekombinować. Tj. Nr 2 może dalej działać:

b) 17 / 9 c) 1.888 * 6

I kończą się takim samym rezultatem jak wątek nr 1 (11.333), ale nie pomogli sobie nawzajem poza krokiem A, dlatego posiadanie dwóch z nich w realizacji tego celu jest stratą czasu.

(Zauważ, że ten przykład nie jest dosłowny; ma na celu wykazanie logicznej zasady. Skala, w której zadania są dzielone w kodzie użytkownika, jest znacznie większa, ale nie potrzebujesz prawdziwej lekcji programowania wielowątkowego, aby uchwycić pomysł tutaj.)

Wykorzystanie wielu procesorów wymaga do tego kodu napisanego w tym celu. Nie możesz po prostu wziąć niczego i powiedzieć: „och, użyj wszystkich 4 rdzeni i zrób to szybciej!”. Nie tak by się stało. Logicznie, wiele (lub większość) problemów i zadań wiąże się z czynnościami, które nie mogą odbywać się równolegle, muszą następować po kolei.


1. Zobacz jednak komentarz Felixa Dombka poniżej; Nie jestem ekspertem od sztucznej inteligencji. Warto również zauważyć, że zgodnie z uwagami Petera Corde'a współczesne zestawy instrukcji i procesory mogą być wykorzystywane przez system operacyjny do optymalizacji bardzo drobnoziarnistych rzeczy w równoległy sposób, a potoki sprzętowe również to robią, choć nie przez rdzenie (jeden rdzeń core ma więcej niż jedną rzecz, działając na strumieniu instrukcji w różnych punktach przed ich ostatecznym wykonaniem). Próbowałem trzymać się tutaj tematu wątków użytkowników, ponieważ myślę, że mniej więcej to masz na myśli.

Złotowłosa
źródło
4
Napisałem dużo równoległego kodu numerycznego, co jest nieco mylące co do szczegółów. Nie działasz równolegle na poziomie pojedynczych operacji arytmetycznych w ten sposób. (Jeśli wyjdziemy poza Raspberry Pi, niektórzy kompilatorzy i procesory i tak już zrównoliczą niektóre z nich nawet poza strukturami wątków.) Równoległe są całe zadania w większych porcjach.
Cegła
4
@Brick „Nie równolegle na poziomie pojedynczych operacji arytmetycznych takich jak ta”. -> Oczywiście, że nie, ale wyjaśnię, że jest to analogia, a nie lekcja na temat programowania wielowątkowego nakrętek i śrub.
goldilocks
4
Równoległość obliczeń, których używasz jako przykładu, jest tak zlokalizowana, że ​​stworzy równoległość na poziomie instrukcji w programie, który ją oblicza, a procesory z wykonywaniem poza kolejnością mogą same wykorzystać tę równoległość.
Peter Cordes,
2
RPi3 używa superskalarnej 2-rzędowej w kolejności en.wikipedia.org/wiki/ARM_Cortex-A53 , więc przy dokładnym planowaniu instrukcji kompilator może nadal wykorzystywać ILP, umieszczając dwie addinstrukcje obok siebie, aby mogły działać w tym samym cykl zegara. Poniższe pomnożenie i podzielenie reszty będzie szeregowane według zależności danych, jak zauważyłeś.
Peter Cordes,
1
Określenie części równoległych niekoniecznie wymaga silnej AI. W sensie „ogólnym” może być; ale łatwo sobie wyobrazić, że komputery mogłyby zastosować pewne podejście heurystyczne, które działa głównie w wielu praktycznych przypadkach. Na przykład komputer nie udowodnił ostatniego twierdzenia Fermata, ale z pewnością istnieją programy przysłowiowe twierdzeń. Zauważ, że współczesne kompilatory dla języków programowania już dokonują wielu zmian w kodzie w ramach swoich kroków optymalizacji, co obejmuje rozumowanie części równoległych.
Felix Dombek
7

Nie dla Pythona.

Inne osoby sugerują, abyś zajął się wątkami, co jest prawidłową odpowiedzią dla większości języków, ale nie wziął pod uwagę, że używasz Pythona.

Python GIL nie pozwala na efektywne wykorzystanie wielu rdzeni.

Zaraz
źródło
4
GIL utrudnia nieco użycie wszystkich 4 rdzeni. W żaden sposób nie czyni to niemożliwym, a nawet tak trudnym.
Fałszywe imię
5

Korzystanie z wielu rdzeni wymaga jawnego ujawnienia równoległości poziomu wątków w systemie operacyjnym, co zwykle wymaga od programisty napisania programu wielowątkowego. (Lub aby uruchomić program jednowątkowy wiele razy na różnych wejściach, takich jak kompilacja make -j4)

Kompilatory dla niektórych języków obsługują jednak automatyczną równoległość. Na przykład C lub C ++ z OpenMP może skompilować zwykłą for()pętlę do programu, który uruchamia wiele wątków.

#pragma omp parallel for
for(int i = 0; i < 1000000; ++i)
{
   A[i] = B[i] * constant + C[i];
}

Ale i tak musi się to zdarzyć, gdy napisałeś lub skompilowałeś program. Obecny sprzęt i systemy operacyjne nie mogą używać wielu rdzeni w celu przyspieszenia programu jednowątkowego.


Powiązane: W jaki sposób pojedynczy wątek działa na wielu rdzeniach? : odpowiedź: nie. Istnieją jednak inne rodzaje paralelizmu, takie jak paralelizm na poziomie instrukcji, który pojedynczy rdzeń procesora znajduje i wykorzystuje do uruchomienia jednego wątku szybciej niż jednej instrukcji na raz.

Moja odpowiedź na to pytanie dotyczy niektórych szczegółów, w jaki sposób współczesne procesory znajdują i wykorzystują drobnoziarnisty paralelizm na poziomie instrukcji. (Głównie koncentruje się na x86). To tylko część tego, jak działają normalne procesory, mając wiele instrukcji w locie, i nie jest to coś, co musisz specjalnie włączyć. (Istnieją liczniki wydajności, które pozwalają zobaczyć, ile instrukcji na zegar procesor udało się uruchomić podczas wykonywania programu lub innych środków.)

Należy pamiętać, że RPi3 używa rdzeni procesora ARM Cortex-A53 . Każdy rdzeń jest superskalarny o szerokości 2 (2 instrukcje na zegar, jak pozwala ILP), ale nie może zmienić kolejności instrukcji, aby znaleźć więcej równoległości na poziomie instrukcji i ukryć opóźnienia.

Mimo to procesor jest przetwarzany potokowo, więc łączna liczba instrukcji w locie (od pobierania i dekodowania aż do etapu zapisu zwrotnego na końcu potoku) jest znacząca. Gdy zależności danych nie ograniczają rzeczy, na każdym etapie potoku, na którym pracuje procesor, mogą znajdować się 2 instrukcje, z przepustowością 2 instrukcji na zegar. (To właśnie oznacza 2-szeroki.)

Nie może wykonywać instrukcji poza kolejnością, ale przy starannym porządkowaniu instrukcji (zwykle przez kompilator) nadal może ukryć opóźnienie instrukcji, która wymaga wielu cykli, aby jej wyjście było gotowe. (np. obciążenie, nawet jeśli trafi do pamięci podręcznej lub zwielokrotnienie zajmie wiele cykli, w porównaniu z dodawaniem gotowym do następnego cyklu). Sztuką jest uporządkowanie instrukcji asm, aby istniało wiele niezależnych instrukcji między tą, która daje wynik, a tą, która go wykorzystuje.

Posiadanie statycznego harmonogramu oprogramowania (kompilatora) jest bardziej kruche niż posiadanie sprzętu, który może wewnętrznie zmieniać kolejność, zachowując złudzenie działania w kolejności programów. Kompilatorom bardzo trudno jest wykonać tak dobrą robotę, jak nawet małe okno poza kolejnością do zamawiania instrukcji, ponieważ błędy w pamięci podręcznej są nieprzewidywalne i trudno analizować łańcuchy zależności między wywołaniami funkcji w czasie kompilacji. Liczba rejestrów jest ograniczona bez sprzętowej zmiany nazw rejestrów.


Wszystko to zapewnia niewielki komfort, gdy Twój kod działa wolniej niż chcesz. Pewnie, że pod maską jest dużo fajnych rzeczy w Cortex-A53, ale jest więcej fajnych rzeczy pod maską w Cortex-A57 (jak wykonanie poza kolejnością do 3 instrukcji na zegar), a nawet więcej w duży procesor x86, taki jak Skylake (nie wspominając o różnicach prędkości zegara).

Cortex-A53 jest dość fantastyczny w porównaniu do https://en.wikipedia.org/wiki/Classic_RISC_pipeline jak oryginalne MIPS, o których dowiesz się w klasie architektury komputerowej, ale według współczesnych standardów jest dość niskiej klasy.

Peter Cordes
źródło
1
„Obecny sprzęt i systemy operacyjne nie mogą używać wielu rdzeni w celu przyspieszenia programu jednowątkowego”. nie jest absolutnie prawdziwe. Na przykład w jednowątkowym programie Java Java może wykonywać wszystkie analizy GC i analizy / kompilacje w czasie wykonywania na dodatkowych rdzeniach procesora. Analiza środowiska wykonawczego jest bardzo ważna, ponieważ może zdecydować się na pewne optymalizacje oparte na uruchamianiu ścieżek kodu, nie kosztując niczego z „jednego wątku” i może znacznie przyspieszyć dzięki temu, czego się uczy z analizy. Ogólnie rzecz biorąc, twój punkt widzenia jest dobry.
Bill K
@BillK Aby być uczciwym, „program” w tym kontekście javanie jest myapp.jar, a na pewno nie jest jednowątkowy.
goldilocks
1
To prawda, że ​​właśnie zwróciłem uwagę, że w zależności od tego, jak zaprojektowano środowisko wykonawcze, „kod, który piszesz”, mimo że jednowątkowy, może korzystać z dodatkowych rdzeni bez wyraźnego kodowania go jako aplikacji wielowątkowej. Python mógłby również dostarczyć bardziej wydajne środowisko uruchomieniowe, ale byłoby to trochę bezcelowe. To i tak nie jest duży skok - myślę, że nawet Java używa tylko dodatkowego 1/2 rdzenia, aby pomóc z jedną aplikacją wątkową.
Bill K
Obecny sprzęt i systemy operacyjne nie mogą używać wielu rdzeni w celu przyspieszenia programu jednowątkowego”. Zaraz potem wyjaśniasz, w jaki sposób sprzęt wykonuje instrukcje równolegle.
Thomas Weller
3
@ThomasWeller Tak, ale aby być wybrednym, procesowanie potokowe nie wykorzystuje wielu rdzeni; jest zawarty w jednym rdzeniu, ale pozwala na pracę z wieloma strumieniami instrukcji. Tzn. Jest to forma równoległości, ale nie jest to forma wielordzeniowego gwintowania.
złotowłosa
4

Nie tak działają procesory ... w ogóle.

W obecnym stanie procesor jest w pełni zdolny do działania przy 100% obciążeniu, przy założeniu, że nie jest dławiony z powodu problemów związanych z temperaturą w temperaturze 80 stopni Celsjusza lub wyższych. Biorąc to pod uwagę, nie chcesz (generalnie) widzieć, że twój procesor jest ustawiony na 100%. Jeśli rutynowo używasz procesora w 100%, prawdopodobnie masz zbyt wiele do obsługi procesora. Spowoduje to jąkanie i ogólne niezadowolenie użytkowników.

Aby porównać z czymś bardziej fizycznym, wykorzystanie procesora przypomina samochód. Samochód prawdopodobnie może jechać z prędkością 100 km / h, ale jest duża szansa, że ​​prędkościomierz odczytuje coś znacznie poniżej tego. Gdy jesteś w mieście, możesz nie być w stanie uzyskać prędkości około 25 km / h. Nie zmienia to jednak faktu, że samochód może jechać z prędkością 100 km / h. Po prostu nie nacisnąłeś na akcelerator wystarczająco mocno.

Jeśli po prostu sprawisz, że RPi będą robić więcej rzeczy (naciskasz więcej na akcelerator), zobaczysz wzrost wykorzystania procesora. Na przykład obserwuj wykorzystanie procesora po uruchomieniu polecenia yesw oknie terminala (pamiętaj, że ctrl+ckończy on polecenia terminalu). Zwiększy to twój procesor o 25%, ponieważ maksymalizuje jeden z czterech rdzeni procesora.

Jacobm001
źródło
5
Myślę, że ta odpowiedź jest myląca, gdy mówi się, że generalnie nie chcesz, aby Twój procesor działał przy 100% wykorzystaniu. Istnieje wiele aplikacji intensywnie wykorzystujących dane liczbowe, w których absolutnie chcesz 100% wykorzystania, ponieważ maszyna (lub maszyny) jest dedykowana do obliczeń. Aby uzyskać prawdziwy czas superkomputera, często musisz udowodnić, że Twój kod jest wystarczająco dobrze zoptymalizowany, aby to zrobić, w przeciwnym razie odmówią ci marnowania zasobów. Jeśli masz klaster Pi, nie uzyskujesz oczywiście wydajności super komputera, ale może to sprawić, że bardziej krytyczne będzie maksymalne wykorzystanie, a nie mniej!
Cegła
3
W pewnym sensie zgadzam się z Brickem w tym sensie, że wydaje się tutaj sugerować, że jeśli procesor ma 25%, to dlatego, że ma na celu oszczędzanie gazu lub przestrzeganie ograniczenia prędkości;) lub uprzejmość, a nie świnia zasobów. Możesz wyjaśnić, że ogólnie rzecz biorąc, ponieważ cokolwiek zadanie czeka przez większość czasu na We / Wy. Rzeczy, które mogą uruchomić jeden rdzeń do samego końca, będą. Tym, co (idealnie) powstrzymuje to przed zakłóceniem interfejsu użytkownika, jest skrócenie czasu - ale realistycznie nadal dość łatwo jest zablokować małą maszynę jednordzeniową.
goldilocks
100% wykorzystanie procesora generalnie nie powoduje słabego UX. Nawet 1000% może być wystarczająco dobre, ponieważ większość programów nie jest ograniczona przez procesor, ale przez inne czynniki. Jedynymi programami, które zwalniają z powodu ekstremalnego obciążenia procesora, są programy, które faktycznie cały czas korzystają z procesora.
Oskar Skog
4

Inne odpowiedzi zawierają szczegółowe informacje, ale nie dotyczą konkretnego pytania.

  1. Tak, jeśli program (i system operacyjny) są zaprogramowane do obsługi wielu rdzeni. („Threading” jest tutaj terminem programowania)
  2. Maszyna zużywa tyle lub tyle każdego rdzenia, ile potrzebuje, aby wykonać zadanie. więc nie trzeba niczego zmieniać.
  3. Państwo może ustawić limity maksymalnego zużycia, ale nie ma potrzeby, aby w normalnych warunkach użytkowania. spójrz na odpowiedzi tutaj: - /unix/151883/limiting-processes-to-not-exceed-more-than-10-of-cpu-usage

NB:

Jeśli chcesz poprawić ogólną wydajność pi, możesz zajrzeć do podkręcania. Umożliwia to szybsze działanie procesora. Wadami są zwiększone wytwarzanie ciepła, krótsza żywotność procesora i wzrost zużycia energii.

Stese
źródło
2

Jeśli to możliwe, sparametryzuję skrypt i wykonam go w osobnych procesach Pythona. Na przykład:

cat parameters.txt | xargs -n1 -P4 python run.py

Inną alternatywą jest wspomniana już biblioteka wieloprocesowa, która pozwala rozwidlać i łączyć procesy w języku Python. Ale to także wymaga posiadania listy parametrów (takich jak nazwa pliku), dla których chcesz wykonywać obliczenia.

NikoNyrh
źródło
Pierwsza część: tak, zakładając, że problem jest zawstydzająco równoległy .
Peter Mortensen
Ahaa prawda, znałem tylko pulę przetwarzania wieloprocesowego, mapale najwyraźniej ma ona również wiele dość skomplikowanych konstrukcji pamięci wspólnej.
NikoNyrh
1

Myślę, że OP może nie rozumieć w pełni pojęć programowania wielordzeniowego / wielowątkowego i tego, jak trudno jest w pełni wykorzystać 100% wielordzeniowego procesora, chyba że algorytm można łatwo przekształcić w kłopotliwie równoległy problem.

Aby uzyskać więcej informacji, możesz przeczytać więcej o dobrze znanym tytule artykułu „The Free Lunch Is Over” http://www.gotw.ca/publications/concurrency-ddj.htm

sonofusion82
źródło
0

Jeśli chcesz przetestować swoje RPI. Możesz uruchomić stresstak, jak tutaj , a następnie zobaczyć, jak używane są Twoje procesory htop. Jest to przydatne, ponieważ możesz sprawdzić, czy twoje źródło zasilania jest wystarczające, jeśli nie wystarczy, twoje RPI spróbuje zużyć zbyt dużo prądu (natężenie prądu) i się wyłączy.

Z drugiej strony, jeśli chcesz używać skryptów w języku Python, powinieneś zobaczyć, joblibktóry działa świetnie, gdy chcesz zrównoleglić procesy, a zatem będziesz używał liczby procesorów, którą chcesz.

silgon
źródło
0

Chociaż wszystkie te odpowiedzi są poprawne na różne sposoby, prawdą jest, że system operacyjny automatycznie użyje różnych rdzeni do rozłożenia obciążenia. Możesz to zobaczyć za pomocą prostego programu python (temp.py powiedz)

while True:
  x = 1.0

otwórz terminal z pulpitu RPi i wpisz, $ topktóry pokaże pracę procesora. Następnie otwórz kolejny terminal, a python3 temp.pyzobaczysz, że zadanie python3 wzrasta do 100% czasu procesora. Następnie otwórz kolejny terminal i powtórz proces, aby zobaczyć, jak przejść do 400%. Tak więc na jednym poziomie, jak skomentował @Shadow, jest to takie proste i jest domyślne. Jednak projektowanie programów, które mogą wykorzystywać przetwarzanie równoległe, nie jest trywialne, jak wyjaśnili inni.

paddyg
źródło
0

Odpowiedź brzmi: TAK! Musisz po prostu napisać program, aby je rozpoznać i użyć. Programy, które to robią, mogą korzystać z rdzeni. Piszę moje, aby to zrobić w Javie, a więc mogę.

Powyższe odpowiedzi od twórców języka Python mają bardzo ograniczoną koncepcję tej odpowiedzi, więc mogą być bardzo mylące, ale odpowiedź brzmi TAK i tylko TAK!

Orubel
źródło
Czy możesz proszę opracować?
SDsolar
0

Ponieważ OP nie określił pytona w swoim pytaniu, chciałbym zasugerować dwa bardziej nowoczesne języki, które działają dobrze na Raspberry Pi i mają bardzo łatwe sposoby używania współbieżności.

Moim ulubionym jest język Rust. Napisałem i skompilowałem programy na Pi. Rdza jest dobra, ponieważ zapobiega wielu typom błędów związanych ze wskaźnikiem i rasą, co sprawia, że ​​pisanie współbieżnego kodu jest łatwiejsze i bezpieczniejsze. Rust jest językiem programowania systemowego, ale potrafi zrobić prawie wszystko, co C może zrobić.

Innym takim językiem jest Go (zwany także Golang, aby ułatwić wyszukiwanie). Go został stworzony przez zespół Google i jest dość dojrzałym językiem. W Go można łatwo tworzyć coroutines, które nazywają „procedurami Go”.

Oba te języki mogą kompilować kod na Raspberry Pi, nawet Pi Zero. Można je jednak skompilować krzyżowo z szybszego komputera, który jest odpowiedni dla dużych programów.

NomadMaker
źródło