The Denny Depok

The Denny Depok

Gosipin IT Bareng Mas Denny Depok Yuk…

The Denny Depok RSS Feed
 
 
 
 

Penjelasan MultiThreading di Javascript

Halo, 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 dikerjainnya cuma beberapa jam seabis sholat subuh.

 

Pertama, cara kerja umum multithread/multiprocess adalah untuk beberapa waktu tertentu suatu fungsi di kerjakan oleh processor. Setelah melewati waktu tertentu, maka konteks akan dialihkan ke fungsi lain. Begitu seterusnya sampai processor kembali menjalankan fungsi yang pernah diberhentikan ditengah jalan tadi dari titik/baris terakhir sebelum konteks di pindahkan ke fungsi lain.

 

Permasalahan yang timbul adalah bagaimana mencatat baris terakhir yang dikerjakan dan bagaimana menyimpan nilai variable yang sedang dipakai dalam fungsi tersebut sehingga ketika fungsi dijalankan kembali masih memiliki state yang sama waktu diberhentikan sementara oleh processor. Biasanya dalam level OS atau virtual machine, tiap konteks dibuat suatu record yang mencatat baris terakhir dan stack yang menyimpan variable-variable fungsi.

 

Dalam implementasi kita ini, kita gak punya akses ke OS/virtual machine untuk memberhentikan suatu fungsi dan mencatat baris terakir yang dikerjakan. Oleh karena itu, solusi satu-satunya (yang kepikiran sama saya) adalah memanggil ulang fungsi tersebut. Memanggil ulang fungsi tentu aja menyebabkan pengerjaan perintah dari awal fungsi. Oleh karena itu fungsi perlu dipermak dengan contoh dibawah ini.

Dari contoh diatas terlihat kita mempergunakan switch dan parameter untuk menentukan dari baris mana kita memulai ulang pelaksanaan fungsi. Ditengah fungsi juga terdapat penambahan “return” untuk menghentikan pelaksanaan fungsi.

 

Diatas adalah contoh fungsi sederhana (yang gak pernah ada fungsi thread mirip kayak gitu :D ), dalam realnya kebanyakan thread melibatkan looping yang memakan waktu. Looping gak bisa sesederhana gitu ubah, karena sifatnya dilaksanakan berulang. Contoh pengubahan yang melibatkan loop :

Jadi konsepnya untuk tiap looping dibuat satu stack switch baru dengan ada assignment untuk mereset step di akhir loop. Jadi kalau misal ada loop didalam loop maka stack switch-nya bertambah.

 

Permasalahan selanjutnya adalah penyimpanan nilai variable. Kalau diimplementasi umum multi thread mempergunakan stack yang di push dengan nilai variable waktu hendak memberhentikan thread dan pop waktu ingin memulai thread, saya mempergunakan metode yang jauh lebih sederhana, yaitu saya membuat kelas baru untuk fungsi thread tersebut dimana variable lokal fungsi jadi variable properti dari kelas. Hal ini memudahkan penyimpanan nilai variable sebab nilai properti kelas otomatis tersimpan walaupun pelaksanaan fungsi sudah ke fungsi lain (hal ini menghilangkan pembuatan penyimpanan ke stack yang rumit). Gambaran perubahan dari fungsi ke kelas dapat digambarkan sebagai berikut :

 

Terlihat diatas saya juga menjadikan parameter step menjadi properti kelas, jadi pemanggilan fungsi run otomatis langsung ke baris dimana fungsi sebelunya dihentikan.

 

Perubahan otomatis fungsi ke kelas yang dipermak baris perintahnya dimungkinkan di javascript sebab ada kelas dewa di javascript yaitu string. Maksudnya semua hal dapat diubah ke string, termasuk fungsi dan kelas yang bisa didapat string kodenya. Contohnya gini :

 

function a()

{

    alert(”dalem a”);

}

 

var aString = “” + a;

alert(aString); // menampilkan source code fungsi a

 

Kemudian tentu aja ada fungsi eval() yang memungkinkan pembuatan kelas secara on the fly.

 

Oh iya, kemarin saya lupa bilang, parser saya naif banget karena mengejar pembuktian konsep aja. Jadi kalo mo gunain harus agak bener mrogramnya, contohnya kalo variable harus dipasangin var, trus penempatan { dan } harus di baris sendiri, kemudian juga hanya mendukung looping dengan while dimana variable loopingnya harus di deklarasiin terlebih dahulu.

 

Emang ini cuma pembuktian konsep sih, dengan harapan ada yang mo ngembangin. Pengembangan yang terpikirkan oleh saya adalah tidak diperlukannya penulisan processMessage() secara manual sehingga otomatis fungsi biasa bisa dijadiin fungsi miltithread. Btw ini juga bisa diimplementasiin ke bahasa lain yang gak punya fasilitas multithread, contohnya actionscript (tetu aja ada penyesuaian).

4 Responses to “Penjelasan MultiThreading di Javascript”

  1. 1
    Kunderemp An-Narkaulipsiy:

    Saya belum sempat membaca kode yang dulu.. :P

    Tapi, dahulu saya pernah lihat JS/UIX yang cukup menarik dan game2 lain buatan tim yang sama (masswerk).

    Itu multi-threading atau tidak yah?

  2. 2
    Wagiman:

    ra mudeng?!

  3. 3
    R. Iqbal:

    “tapi sebelum baca mohon pengertian kalo tehnik ini naif karena dikerjainnya cuma beberapa jam seabis sholat subuh.”

    :) Biasanya memang habis subuh waktu yang Pak Denny paling efektif kan Pak :D

  4. 4
    Immispsats:

    Ciao ragazzi e ragazze,
    Spero di non esserdmi bsagliato a creare il thread qui su #caegory.
    Sono nuovo su questo forum e spero di potere partecipare attivamente.
    A presto http://www.chatt-gratis.net/javachat/imgchtgratis/musica.gif

Leave a Reply