คำถามติดแท็ก multithreading

มัลติเธรดคือความสามารถของคอมพิวเตอร์หรือโปรแกรมในการทำงานพร้อมกันหรือแบบอะซิงโครนัสโดยใช้การประมวลผลหลายกระแสพร้อมกัน (โดยทั่วไปเรียกว่าเธรด)

4
วิธีใช้ WPF Background Worker
ในแอปพลิเคชันของฉันฉันต้องดำเนินการขั้นตอนการกำหนดค่าเริ่มต้นใช้เวลาดำเนินการประมาณ 7-8 วินาทีในการที่ UI ของฉันไม่ตอบสนอง ในการแก้ไขปัญหานี้ฉันทำการเริ่มต้นในเธรดแยกต่างหาก public void Initialization() { Thread initThread = new Thread(new ThreadStart(InitializationThread)); initThread.Start(); } public void InitializationThread() { outputMessage("Initializing..."); //DO INITIALIZATION outputMessage("Initialization Complete"); } ฉันได้อ่านบทความเกี่ยวกับBackgroundWorkerและควรอนุญาตให้แอปพลิเคชันของฉันตอบสนองได้อย่างไรโดยไม่ต้องเขียนเธรดเพื่อทำงานที่มีความยาว แต่ฉันไม่เคยประสบความสำเร็จในการพยายามติดตั้งใช้งาน สิ่งนี้ใช้BackgroundWorker?

6
สร้างหัวข้อในหลาม
ฉันมีสคริปต์และฉันต้องการให้ฟังก์ชันหนึ่งทำงานในเวลาเดียวกันกับอีกฟังก์ชันหนึ่ง โค้ดตัวอย่างที่ฉันได้ดู: import threading def MyThread (threading.thread): # doing something........ def MyThread2 (threading.thread): # doing something........ MyThread().start() MyThread2().start() ฉันมีปัญหาในการทำงานนี้ ฉันอยากจะใช้ฟังก์ชันเธรดแทนคลาส นี่คือสคริปต์ทำงาน: from threading import Thread class myClass(): def help(self): os.system('./ssh.py') def nope(self): a = [1,2,3,4,5,6,67,78] for i in a: print i sleep(1) if __name__ == "__main__": Yep = myClass() thread …

10
มีวิธีการสร้างวัฒนธรรมสำหรับแอปพลิเคชันทั้งหมดหรือไม่ เธรดปัจจุบันและเธรดใหม่ทั้งหมดหรือไม่
มีวิธีการสร้างวัฒนธรรมสำหรับแอปพลิเคชันทั้งหมดหรือไม่ เธรดปัจจุบันและเธรดใหม่ทั้งหมดหรือไม่ เรามีชื่อของวัฒนธรรมที่เก็บไว้ในฐานข้อมูลและเมื่อใบสมัครของเราเริ่มต้นเราจะทำ CultureInfo ci = new CultureInfo(theCultureString); Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; แต่แน่นอนว่าสิ่งนี้จะ "หลงทาง" เมื่อเราต้องการทำอะไรในเธรดใหม่ มีวิธีการตั้งค่านั้นCurrentCultureและCurrentUICultureสำหรับแอปพลิเคชันทั้งหมดหรือไม่ ดังนั้นหัวข้อใหม่ที่ได้รับวัฒนธรรมนั้น หรือเป็นเหตุการณ์ที่เกิดขึ้นเมื่อใดก็ตามที่มีการสร้างกระทู้ใหม่ที่ฉันสามารถขอได้?

13
ความแตกต่างระหว่างวิธีการเกิดพร้อมกันขนานและวิธีการไม่ตรงกันคืออะไร?
การทำงานพร้อมกันคือการทำงานสองอย่างพร้อมกันบนเธรดแยกกัน อย่างไรก็ตามวิธีการแบบอะซิงโครนัสทำงานแบบขนาน แต่อยู่บน 1 เธรดเดียวกัน สิ่งนี้สำเร็จได้อย่างไร นอกจากนี้สิ่งที่เกี่ยวกับความเท่าเทียมกัน? อะไรคือความแตกต่างระหว่างแนวคิดทั้งสามนี้

8
ตัวอย่าง / กวดวิชา Mutex? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ฉันใหม่กับมัลติเธรดและพยายามที่จะเข้าใจวิธีการทำงานของ mutex ทำ Googling มาก แต่ก็ยังมีข้อสงสัยว่ามันทำงานอย่างไรเพราะฉันสร้างโปรแกรมของตัวเองซึ่งการล็อคไม่ทำงาน หนึ่งในไวยากรณ์ที่ไม่เข้าใจง่ายของ mutex คือpthread_mutex_lock( &mutex1 );มันดูเหมือนว่า mutex กำลังถูกล็อคเมื่อสิ่งที่ฉันต้องการล็อคจริงๆคือตัวแปรอื่น ๆ ไวยากรณ์นี้หมายความว่าการล็อก mutex ล็อคขอบเขตของรหัสจนกว่า mutex จะถูกปลดล็อกหรือไม่? จากนั้นเธรดจะรู้ได้อย่างไรว่าพื้นที่ถูกล็อก [ อัพเดท: กระทู้รู้ว่าพื้นที่ถูกล็อคโดยการ ฟันดาบของหน่วยความจำ ] และปรากฏการณ์เช่นนี้ไม่ควรถูกเรียกว่าส่วนวิกฤต [ ปรับปรุง: วัตถุส่วนที่สำคัญมีอยู่ใน Windows เท่านั้นโดยที่วัตถุนั้นเร็วกว่า mutexes และสามารถมองเห็นได้เฉพาะเธรดที่ใช้งานเท่านั้น มิฉะนั้นส่วนสำคัญจะอ้างถึงพื้นที่ของรหัสที่ป้องกันโดย mutex ] ในระยะสั้นคุณสามารถช่วยด้วยโปรแกรมตัวอย่าง mutex ที่ง่ายที่สุดที่เป็นไปได้และคำอธิบายที่ง่ายที่สุดเกี่ยวกับตรรกะของวิธีการทำงาน ฉันแน่ใจว่านี้จะช่วยให้ความอุดมสมบูรณ์ของมือใหม่อื่น …

8
errno เป็นเธรดที่ปลอดภัยหรือไม่
ในerrno.hตัวแปรนี้มีการประกาศตามextern int errno;คำถามของฉันคือมันปลอดภัยที่จะตรวจสอบerrnoค่าหลังจากการโทรหรือใช้ perror () ในรหัสแบบมัลติเธรด นี่เป็นตัวแปรที่ปลอดภัยหรือไม่ ถ้าไม่เช่นนั้นทางเลือกคืออะไร? ฉันใช้ linux กับ gcc บนสถาปัตยกรรม x86
175 c  linux  multithreading  gcc 

7
เธรดการโทรต้องเป็น STA เนื่องจากส่วนประกอบ UI จำนวนมากต้องการสิ่งนี้
ฉันใช้http://www.codeproject.com/KB/IP/Facebook_API.aspx ฉันพยายามที่จะเรียกXAMLซึ่งสร้างขึ้นโดยใช้WPF แต่มันทำให้ฉันมีข้อผิดพลาด: เธรดการโทรต้องเป็น STA เนื่องจากส่วนประกอบ UI จำนวนมากต้องการสิ่งนี้ ผมไม่ทราบว่าจะทำอย่างไร. ฉันพยายามทำสิ่งนี้: FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList(); แต่มันทำให้ฉันมีข้อผิดพลาด ฉันเพิ่มผู้ทำงานเบื้องหลัง: static BackgroundWorker bw = new BackgroundWorker(); static void Main(string[] args) { bw.DoWork += bw_DoWork; bw.RunWorkerAsync("Message to worker"); Console.ReadLine(); } static void bw_DoWork(object sender, DoWorkEventArgs e) { // This is called on the worker …


3
std :: atomic คืออะไร?
ฉันเข้าใจว่าstd::atomic<>เป็นวัตถุอะตอม แต่ปรมาณูในระดับใด เพื่อความเข้าใจของฉันการดำเนินการสามารถเป็นอะตอม การทำวัตถุอะตอมหมายถึงอะไรกันแน่? ตัวอย่างเช่นถ้ามีสองกระทู้พร้อมกันรันรหัสต่อไปนี้: a = a + 12; ถ้าอย่างนั้นการปฎิบัติการทั้งหมดadd_twelve_to(int)คืออะไร? หรือมีการเปลี่ยนแปลงกับตัวแปรอะตอม (เช่นoperator=())?

7
ในทางเทคนิคเหตุใดกระบวนการใน Erlang จึงมีประสิทธิภาพมากกว่าเธรด OS
ลักษณะของ Erlang จากการเขียนโปรแกรม Erlang (2009): การทำงานพร้อมกันของ Erlang นั้นรวดเร็วและสามารถปรับขนาดได้ กระบวนการมีน้ำหนักเบาซึ่งเครื่องเสมือน Erlang ไม่ได้สร้างเธรด OS สำหรับทุกกระบวนการที่สร้างขึ้น พวกเขาถูกสร้างกำหนดเวลาและจัดการใน VM เป็นอิสระจากระบบปฏิบัติการพื้นฐาน เป็นผลให้เวลาการสร้างกระบวนการเป็นลำดับไมโครวินาทีและเป็นอิสระจากจำนวนกระบวนการที่มีอยู่พร้อมกัน เปรียบเทียบสิ่งนี้กับ Java และ C # ซึ่งทุกขั้นตอนจะสร้างเธรด OS พื้นฐานขึ้นมา: คุณจะได้รับการเปรียบเทียบที่แข่งขันได้มากโดย Erlang มีประสิทธิภาพเหนือกว่าทั้งสองภาษา จากการเขียนโปรแกรมเชิง Concurrency ใน Erlang (pdf) (สไลด์) (2003): เราสังเกตว่าเวลาที่ใช้ในการสร้างกระบวนการ Erlang นั้นมีค่าคงที่ 1 ถึง 2,500 กระบวนการ; หลังจากนั้นจะเพิ่มขึ้นเป็นประมาณ 3 วินาทีสำหรับกระบวนการมากถึง 30,000 กระบวนการ ประสิทธิภาพของ Java และ …

2
Redis เป็นแบบเธรดเดี่ยวแล้วจะทำอย่างไรพร้อมกัน I / O?
พยายามที่จะเข้าใจพื้นฐานบางส่วนของ Redis ฉันมาข้ามที่น่าสนใจโพสต์บล็อก ผู้เขียนฯ : Redis เป็นแบบเธรดเดี่ยวที่มี epoll / kqueue และสเกลแบบไม่มีกำหนดในแง่ของ I / O concurrency ฉันเข้าใจผิดอย่างแน่นอนในสิ่งที่เป็นเกลียวเพราะฉันพบว่าคำสั่งนี้ทำให้งง ถ้าโปรแกรมเป็นเธรดเดี่ยวมันจะทำอะไรพร้อมกันได้อย่างไร ทำไมจึงเป็นเรื่องที่ยอดเยี่ยมมากที่การดำเนินการ Redis เป็นแบบปรมาณูถ้าเซิร์ฟเวอร์เป็นเธรดเดี่ยวอยู่แล้ว? มีใครช่วยอธิบายปัญหานี้หน่อยได้ไหม?

11
BackgroundWorker vs กระทู้พื้นหลัง
ฉันมีคำถามเกี่ยวกับโวหารเกี่ยวกับการเลือกการใช้เธรดพื้นหลังที่ฉันควรใช้กับแอพพลิเคชั่น windows form ปัจจุบันฉันมีBackgroundWorkerรูปแบบที่มีการ(while(true))วนซ้ำไม่สิ้นสุด ในวงนี้ฉันใช้WaitHandle.WaitAnyเพื่อเก็บกระทู้งีบหลับจนกว่าสิ่งที่น่าสนใจเกิดขึ้น เหตุการณ์หนึ่งที่ฉันจัดการรอเป็นStopThreadเหตุการณ์ "" เพื่อให้ฉันสามารถแยกวง Form.Dispose()เหตุการณ์นี้จะส่งสัญญาณเมื่อจากแทนที่ของฉัน ฉันอ่านที่ไหนสักแห่งที่BackgroundWorkerมีไว้สำหรับการดำเนินการที่คุณไม่ต้องการผูก UI ด้วยและมีจุดสิ้นสุดที่ จำกัด - เช่นการดาวน์โหลดไฟล์หรือประมวลผลรายการตามลำดับ ในกรณีนี้ "สิ้นสุด" ไม่เป็นที่รู้จักและเฉพาะเมื่อปิดหน้าต่าง ดังนั้นฉันควรจะใช้เธรดพื้นหลังแทนการBackgroundWorkerใช้เพื่อวัตถุประสงค์นี้หรือไม่

9
เหตุใดความผันผวนจึงไม่ถือว่ามีประโยชน์ในการเขียนโปรแกรม C หรือ C ++ แบบมัลติเธรด
ดังที่แสดงในคำตอบที่ฉันเพิ่งโพสต์เมื่อเร็ว ๆ นี้ดูเหมือนว่าฉันจะสับสนเกี่ยวกับยูทิลิตี้ (หรือขาดของมัน) volatileในบริบทการเขียนโปรแกรมแบบมัลติเธรด volatileความเข้าใจของฉันนี้เวลาใดตัวแปรอาจมีการเปลี่ยนแปลงนอกไหลของการควบคุมของชิ้นส่วนของรหัสเข้าถึงมันว่าตัวแปรที่ควรได้รับการประกาศให้เป็น ตัวจัดการสัญญาณการลงทะเบียน I / O และตัวแปรที่แก้ไขโดยเธรดอื่นทั้งหมดล้วนเป็นสถานการณ์ดังกล่าว ดังนั้นถ้าคุณมี int ส่วนกลางfooและfooถูกอ่านโดยหนึ่งเธรดและตั้งค่าเป็นอะตอมต่อโดยเธรดอื่น (อาจใช้คำสั่งเครื่องที่เหมาะสม) เธรดการอ่านจะเห็นสถานการณ์นี้ในแบบเดียวกับที่มันเห็นตัวแปร tweaked โดยตัวจัดการสัญญาณหรือ แก้ไขโดยเงื่อนไขฮาร์ดแวร์ภายนอกและดังนั้นจึงfooควรประกาศvolatile(หรือสำหรับสถานการณ์แบบมัลติเธรดเข้าถึงได้ด้วยโหลดหน่วยความจำไม่พอใจซึ่งน่าจะเป็นทางออกที่ดีกว่า) ฉันผิดและอยู่ที่ไหน

17
วิธีการจับข้อยกเว้นจากเธรด
ฉันมีคลาส Java หลักในชั้นเรียนฉันเริ่มหัวข้อใหม่ในหลักมันจะรอจนกว่าด้ายจะตาย ในบางช่วงเวลาฉันโยนข้อยกเว้นรันไทม์จากเธรด แต่ฉันไม่สามารถจับข้อยกเว้นที่โยนออกจากเธรดในคลาสหลักได้ นี่คือรหัส: public class Test extends Thread { public static void main(String[] args) throws InterruptedException { Test t = new Test(); try { t.start(); t.join(); } catch(RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stoped"); } @Override public void run() { try { while(true) { …

7
ความแตกต่างระหว่างตัวเลือกการซิงโครไนซ์เธรดต่าง ๆ ใน C # คืออะไร
บางคนสามารถอธิบายความแตกต่างระหว่าง: ล็อค (someobject) {} ใช้ Mutex ใช้เซมาฟอร์ ใช้การตรวจสอบ ใช้คลาสการซิงโครไนซ์. Net อื่น ๆ ฉันแค่คิดออกไม่ได้ ดูเหมือนว่าฉันสองคนแรกเหมือนกันหรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.