Tags:

คือผมกำลังเขียนโปรแกรม multiprocessing ครับ แต่ผมไม่เคยเขียนมาก่อนเลยครับ
ซึ่งปัญหาที่เจอคือมีการทำงาซ้ำซ้อนครับ การทำงานของผมเป็นดังนี้
- ดึงข้อมูลจากฐานข้อมูล เช่น [1,2,3,4,5,6]
- นำข้อมูลส่งไปเว็บเซอร์วิส
- รับค่าข้อมูลกลับมา

ปัญหา

-ทำงานซ้ำซ้อนกัน มี 100 process ก็ทำเหมือนกันทั้ง 100 เช่น เอาค่า 1 มาส่งไป ws ก็เหมือนกันทั้งหมด 100 process
ผมลองแก้ไขให้เพิ่มสถานะเข้าไป แต่โปรแกรมทำงานไวมากทำให้ปรับสถานไม่ทัน โปรแกรมตัวใหม่ก็เอาตัวที่ทำมาแล้วกลับมาทำอีก
- ทำให้เวลาที่ได้เพิ่มเข้าไปอีก แทนที่จะลดเวลาการทำงานลง

จึงอยากรบกวนทุกท่านช่วยหาแนวทางให้ด้วยครับ

Get latest news from Blognone
By: Architec
ContributorWindows PhoneAndroidWindows
on 21 June 2016 - 15:48 #920810

สมัยที่ know how ของผมเกือบจะเป็นศูนย์ ผมใช้วิธี db ซ้อน db ตัวแรกเป็นฐานข้อมูลธรรมดา อีกตัวใช้คู่กับ thread คุมการเปิดปิด process ทั้งหมด(db on ram) อันไหนใช้ซ้ำๆก็จับลง db ตัวหลัง

By: naiaong
iPhone
on 21 June 2016 - 16:04 #920811

ถ้าเป็น Ruby ผมใช้ sidekiq นะครับ
Add jobs ลง Redis.
แล้วให้ process มาหยิบเอาไปทำ

By: AMp
In Love
on 21 June 2016 - 18:21 #920851

ถ้าเอาถึกๆ เลยก็คือ เพิ่มตัวกระจายงานมาอีกตัว แล้วให้ทุก process รับงานจากตัวนี้เท่านั้น (จะผ่าน db หรืออะไรก็แล้วแต่)

By: revensoft
Windows PhoneWindows
on 21 June 2016 - 19:42 #920872

ต้องเขียนตัวกระจายงานก่อนครับ เลือกวิธีว่าจะกระจายงานให้ process ต่างๆ ทำอะไรกันบ้างจากนั้นถึงค่อยแจกจ่ายงานไปให้ process ต่างๆ ครับ เช่น
ผมจะทำ 1 + 2 + 3 ... 1,000,000 โดยผมกำหนดจำนวน process ตายตัวที่ 4 processes โดยมีการกระจายงานให้ P1(Process 1) นั้น + 1 ... 250,000, P2 + 250,001 ... 500,000, P3 + 500,001 ... 750,000 และ P4 + 750,001 ... 1,000,000

เมื่อแต่ละ process ทำงานจบแล้วก็จะส่งค่าไปยัง array รับค่าซึ่งแต่ละ process ก็จะส่งค่าเข้าช่องของตัวเองโดยมีตัวรับงานคอยตรวจว่าค่ามาครบทุกจากนั้นจึงส่งค่ากลับ process หลักเป็นอันจบกระบวนการ

ปล. ผมเข้าใจว่าเป็น Multi-Thread นะครับ ถ้า Multi-process จริงๆ คงต้องส่งค่าผ่าน memory mapped file เอาละครับ

By: khao_lek on 22 June 2016 - 09:18 #920945

ขอบคุณมากครับ ทุกๆ ท่าน ผมก็ตามหากระทู้ผมหายไปไหน จริงๆ ผมตั้งไว้ใน python แต่กลับมาโผล่ใน Blognone Forum เดี่ยวผมจะลองศึกษาให้มากกว่านี้ ตอนนี้ก็ได้ความรู้เพิ่มแล้ว แต่นี้คงไม่ทันแน่ขอใช้งานแบบถึกๆไปก่อนครับ แล้วจะไปฝึกเขียนใหม่แล้วจะแจ้งให้ทราบครับ

By: akira on 25 June 2016 - 10:54 #921808

ลองศึกษา Thread ดีๆ ฟังก์ชั่นบางตัวมันใช้จัดคิวได้ แล้วรอก่อนจะทำการบันทึกได้