The Denny Depok

The Denny Depok

Gosipin IT Bareng Mas Denny Depok Yuk…

The Denny Depok RSS Feed
 
 
 
 

Cross Browser MultiThreading dengan JavaScript

Halo…

Kalo kemaren-kemaren saya ngomongin soal menye-menye (yang gak ada artinya) sekarang kita balik lagi ngomongin soal programming !

 

Salah satu hal yang paling dipengenin programmer javascript adalah punya fungsionalitas multi threading. Kalo cari di om Google, banyak banget orang yang nanya dibeberapa forum soal fasilitas multithreading itu. Walaupun banyak pro kontra antara perlu ato tidak javascript punya fasilitas multithread, ada saja terus orang yang nyari.

 

Sewaktu FireFox 2.x menggunakan javascript  1.7, ada yang mengimlementasikan thread dengan konstruk bahasa generator. Anda bisa lihat disini. Tapi permasalahannya javascript 1.7 cuma didukung oleh firefox, bahkan opera yang biasanya paling terdepan belum mengimplementasikan, apalagi IE –> kalo ini sih jangan berharap banyak :P . Akhirnya implementasi yang cerdas diatas jadi gak berguna. Akhirnya saya turun tangan untuk buat implementasi multi thread :D :D :D. Sebenernya idenya udah dari lama sih, bahkan thesis saya awalnya mo gunain ini.

 

Idenya sederhana, jadi gimana caranya jalanin kode yang bisa di suspensi untuk melakukan kode yang lain. Untuk yang sering pake javascript pasti langsung kepikiran sama settimeout. Cuma kalo ngoding manual pake settimeout tentu programmernya cape. Oleh karena itu saya buat lib yang menerima sebuah fungsi, kemudian fungsi tadi saya modifikasi secara otomatis sehingga eksekusi fungsi tadi bisa diinterupt.

 

Jadi mrogramnya seperti dibawah ini :

<script src=”thread.js”></script>

function threadFunc()

{

    // thread command here

    processMessage(); // pass excecution to other thread

    // resume start here

}

 

var thread = new Thread(threadFunc);

thread.run();

 

Jadi agak mirip sama thread di bahasa pemrograman lain kan ? Oh iya, karena di javascript kita gak bisa pake preemtive multitasking, makanya disini pakai cooperative multi tasking. Untuk membuat eksekusi berpindah ke thread yang lain, panggil fungsi (jangan bingung, ini konstruk buatan saya sendiri :D )  :

 

processMessage();

 

Untuk testing, coba buka ke Halaman Test Multi Threading JavaScript.

Kalau misalnya mau download, bisa klik disini : jsthread.zip

 

Oh iya, ini saya dah coba di FireFox 3, IE 8 dan Chrome. Untuk Opera ato FireFox/IE versi lama mohon maaf aja ya, dikomputer saya cuma ada ketiga browser diatas.

 

Untuk dasar teori lengkapnya, saya jelasin kalo ada yang nanya aja, soal agak panjang dan mungkin sebagian besar orang gak tertarik…

9 Responses to “Cross Browser MultiThreading dengan JavaScript”

  1. 1
    silent:

    Untuk dasar teori lengkapnya, saya jelasin kalo ada yang nanya aja, soal agak panjang dan mungkin sebagian besar orang gak tertarik…

    Ceritain dong, kalo gak mau di posting, di comment juga gpp. Ditunggu ya…

  2. 2
    Remo Harsono:

    Tul…ikutan nunggu ahhh…

  3. 3
    Agus Suhartono:

    Jadi agak mirip sama thread di bahasa pemrograman lain kan ?

    saya jadi inget DoEvent-nya VB tempo doeloe

    perkembangan aplikasi web memang smakin pesat aja
    ketika klorofil dkk dirilis, terutama konsep web desktop saya menganggap ini over engineering.
    apa mampu JavaScript di browser menangani hal ini?

    tapi perkembangannya ternyata bagus sekali
    engine JS smakin dikembangkan
    bahkan Eclipse.Org mengeluarkan RAP

    kembali ke MultiThreading
    mengingat fungsi JS yang smakin bertambah
    tidak sesederhana dulu lagi memang MultiThreading diperlukan

    solusi yang diberikan Mas Deny Depok bagus sekali
    walaupun masih menggunakan cooperative multi tasking yang mudah hang
    coba kalau programmer lupa menyisipkan processMessage(); dalam looping, tentu akan hang
    tentu saja hal ini akan membuat kerja programmer lebih berat dengan meneliti tempat-tempat yang harus disisipi processMessage();

    tapi ini nggak masalah mengingat ini solusi yang ada saat ini
    selamat atas ide briliannya

    saya berharap nanti akan ada fitur preemtive multitasking yang native di JS.

  4. 4
    Denny Depok:

    @silent & Remo Harsono

    He..he..he.. sebentar ya, nanti kayaknya saya buat di post aja, soalnya terlalu panjang kalo di comment. 2 hari lagi kedepan ya..

  5. 5
    Denny Depok:

    @Agus Suhartono

    Mas kalo dari group pengembang ecma script (nama official javascript) native threading akan di dukung di versi 3, wah 1.7 aja susah untuk diimplementasi oleh browser lain.

    Memang cooperative multitasking bisa buat hang kalo programernya lupa naro fungsi dispatch, tapi dengan asumsi kalo aplikasi javascript dibuat oleh tim programmer yang kecil biasanya sih gak masalah, karena jarang programmer mo ngerusak programmnya sendiri kan.

    Jujur yang saya implement ini metodenya naif banget, tapi jalan. Dengan asumsi yang koding multitaskingnya gak nakal. Ini juga menghilangkan kerumitan locking shared variable, karena semua perintah (dalam satu statement) dilaksanakan secara utuh, beda dengan preemtive yang memungkinkan terjadi perpindahan konteks eksekusi ditengah statement yang berpotensi menyebabkan inkonsistensi bahkan deadlock.

  6. 6
    Kunderemp An-Narkaulipsiy:

    Pakai Iceweasel v. 2.0.0.3 bisa kok, Bang Deny.

  7. 7
    The Denny Depok » Penjelasan MultiThreading di Javascript:

    [...] kemarin saya sudah janji untuk jelasin metode multi thearding di javascript yang saya post di sini. Dalam post ini saya mo jelasain, tapi sebelum baca mohon pengertian kalo tehnik ini naif karena [...]

  8. 8
    doez:

    thx infonya bos

  9. 9
    enjoync:

    srpmic casino vegas red casino 2008 snoqualmie casino motel .las vegas casino shuttles club casino usa sesame street casino big daddy’s casino .pretend casino paradise 8 casino .ps3 ratchet casino leela goa casino boardwalk casino vegas little creek casino olympia .too toby keith ip casino .Ok, here .see .a search but new orleans harris casino sonesta beach resort and casino may be For soboba casino restaurant too cannery casino hotel hooters casino address Get info on binion casino look may be In tunica grand casino zz top winstar casino wathc Here you search hotel casino lake charles stuff site senecaniagaracasino.com seneca casino mirage casino sold blue heron casino it called crown royale casino lytton san pablo casino belle isle casino mi the aruba resort casino In the riverside spa and casino must be
    macau casino jobs spade casino .This was the need for morongo casino new years or pogo.com casino And soaring eagle casino and resort mt pleasant mi .or .must be .or someone image as tulsa casino jericho casino should not As to naco hotel and casino or richards bay casino cool cat casino bonus codes fiesta casino hotel henderson borgatta casino atlantic city Whith quebec casino age Is the Well .

Leave a Reply