BAB II LANDASAN TEORI 2.1 Multithreading Programming Multithreading Programming adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi atau proses dapat dijalankan secara bersamaan dalam sebuah program. Satu kumpulan instruksi yang akan dieksekusi secara independen dinamakan thread. Thread sangat berguna untuk membuat proses yang interaktif, misalnya pada permainan (game). Dengan menggunakan sejumlah thread, program tetap dapat menggerakkan sejumlah objek sembari memberikan kesempatan pemakai untuk melakukan tanggapan melalui keyboard. Web browser merupakan contoh lain penggunaan thread. Tanpa thread, Web browser akan menghentikan segala tanggapan terhadap pemakai ketika perangkat lunak tersebut sedang mengambil isi dari suatu URL. Tidak menutup kemungkinan juga bisa digunakan dalam sistem learning yang dimana dalam sistem learning juga ada beberapa proses yang bisa dilakukan secara bersamaan, semisal tentang pemrosesan datanya yang terhitung besar, maka pemrosesan data tersebut bias direkayasa pemrosesanya dengan menggunakan thread sehingga bias membuat proses eksekusi datanya bias lebih cepat. Pembuatan Multithreading Programming bisa digunakan dibeberapa bahasa pemrogramman, salah satunya ialah bahasa pemrogramman java. Dalam pembuatanya di bahasa pemrogramman java programming dibuat dengan menggunakan dua cara pembuatan yaitu yang oertama dengan mernggunakan cara menggunakan kelas thread, dan cara kedua dalam pembuatan programming dalam bahasa pemrogramman java yaitu dengan melalui runnable, runnable sesungguhnya adalah sebuah interface. Dengan mengimplementasikan interface ini, sebuah kelas yang menangani thread dapat diciptakan. Ada beberapa kondisi dari programming yang akan dijalankan yang pertama ialah Running, dalam kondisi ini berarti thread sedangh dieksekusi dan masuk dalam control CPU, kemudian ada Ready to run yaitu kondisi yang sudah siap dieksekusi namun masih ada belum kesempatan untuk mengeksekusinya. Setelah itu ada sebuah 7
kondisi yang dinamakan dengan Resume. Kondisi ini merupakan kondisi yang dimana thread ini sempat diberhentikan sementara dan kemudian siap untuk di eksekusi kembali. Suspended merupakan salah satu kondisi dimana sebuah thread berhenti sementara dan kemudian memperbolehkan CPU untuk mengerjakan thread lainya. Yang terakhir adalah blocked, kondisini ini ialah disaat sebuah thread diberhentikan oleh CPU. 2.1.1 Keuntungan MultiThreading Keuntungan dari sistem yang menerapkan Multithreading dapat kita kategorikan menjadi empat bagian, empat bagian itu menyakup dari beberapa aspek yang ada pada pembuatan sistem komputer : a) Responsif. Aplikasi interaktif menjadi tetap responsif meskipun sebagian dari program sedang diblok atau melakukan operasi lain yang panjang. Umpamanya, sebuah thread dari web browser dapat melayani permintaan pengguna sementara thread yang lain berusaha menampilkan gambar. b) Berbagi sumber daya. Beberapa thread yang melakukan proses yang sama akan berbagi sumber daya. Keuntungannya adalah mengizinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama. c) Ekonomis. Pembuatan sebuah proses memerlukan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan menggunakan thread, karena thread membagi memori dan sumber daya yang dimilikinya sehingga lebih ekonomis untuk membuat thread dan context switching thread. Akan susah mengukur perbedaan waktu antara thread dan switch, tetapi secara umum pembuatan dan pengaturan proses akan memakan waktu lebih lama dibandingkan dengan thread. Pada Solaris, pembuatan proses memakan waktu 30 kali lebih 8
lama dibandingkan pembuatan thread sedangkan proses context switch 5 kali lebih lama dibandingkan context switching thread. d) Utilisasi arsitektur multiprosesor. Keuntungan dari Multithreading dapat sangat meningkat pada arsitektur multiprosesor, dimana setiap thread dapat berjalan secara paralel di atas procesor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi paralel, tetapi pada kenyataanya hanya satu thread yang dijalankan CPU pada satu-satuan waktu. 2.2 Apache Mahout Apache Mahout merupakan open source library yang ada di dalam bahasa pemrogaman java [6]. Yang diimplementasikan diatas Apache Hadoop. Apache Mahout dapat dijalankan pada sistem terdistribusi maupun sistem tunggal. Sistem terdistribusi tepat digunakan dalam skala besar misalkan untuk tujuan bisnis. Sebaliknya bagi peneliti yang mempunyai sumber daya terbatas, Apache Mahoutpun dapat digunakan dalam sistem tunggal. Ada tiga algoritma yang menjadi fokus utama dalam pengembangan Apache Mahout yaitu Recommender Mining, Clustering, dan Classification [2]. Aplikasi ini ditulis dengan menggunakan bahasa pemrograman java. Apache sedang mengembangkan riset di bidang big data, dengan implementasinya yang terkenal yaitu Apache Maven dan Hadoop. Apache Mahout kerja di atas platform ini. Maka tak heran jika penerapan riset recommender sistem dalam skala yang besar menjadi keunggulannya. Algoritma Collaborative Filtering telah disiapkan sekaligus dengan evaluasinya. User similiarity, item similiarity, user neighbourhood dan recommender merupakan algoritma yang menarik untuk dicoba. Keunggulan lainnya adalah dukungan komunitas telah tersedia di situs resminya, memungkinkan peneliti untuk berinteraksi dengan peeliti lain di berbagi belahan dunia [2]. 9
2.2.1 Apache Mahout Untuk Recommender Mining Reommender Mining atau bisa disebut dengan sistem rekomendasi merupakan salah satu sistem learning yang saat ini banyak digunakan, terutama pada sistem e- commerce, beberapa perusahaan perusahaan seperti amazon,google, facebook, dan masih banyak lagi yang menggunakan sistem rekomendasi ini [3]. Hal itu membuat sistem rekomendasi banyak digunakan untuk penelitian yang bertujuan ingin mengembangkan sistem tersebut agar bisa lebih baik lagi untuk digunakan dalam masa mendatang. Apache Mahout merupakan salah satu aplikasi open source yang sekarang sedang dikembangkan untuk sistem rekomendasi, dalam Apache Mahout terdapat beberapa algoritma untuk sistem rekomendasi yaitu Item Based Collaborative Filtering dan juga User Based Collaborative Filtering. Didalamnya terdapat beberapa komponen yang mendukung sistem rekomendasi yaitu model data, UserSimilarity, ItemSimilarity, UserNeighboorhood dan juga recommender. Beberapa komponen tersebut merupakan komponen dasar yang digunakan Apache Mahout dalam membangun sebuah sistem rekomendasi. 2.2.2 Apache Mahout Untuk Clustering Apache Mahout bukan hanya bisa digunakan untuk membuat sistem rekomendasi saja, karena Apache Mahout merupakan aplikasi yang dibuat untuk sistem learning maka semua aspek sistem yang ada pada sistem learning ada pada Apache Mahout, salah satunya ialah clustering atau bisa disebut juga dengan pengelompokan. Clustering secara luas digunakan dalam berbagai aplikasi seperti riset pasar, pengenalan pola, analisis data, dan pengolahan gambar. Clustering juga dapat membantu pelaku pemasaran menemukan kelompok yang berbeda di dasar pelanggan mereka. Dan mereka bisa mencirikan kelompok pelanggan mereka berdasarkan pola pembelian. Dalam bidang biologi, dapat digunakan untuk menurunkan tanaman dan hewan taksonomi, mengkategorikan gen dengan fungsi serupa dan mendapatkan wawasan ke dalam struktur yang melekat dalam populasi. Clustering juga membantu dalam mengklasifikasikan dokumen di web untuk penemuan informasi, dan masih banyak lagi. Algoritma yang digunakan dalam sistem Clustering pada Apache ialah k-means. 10
K-Means adalah algoritma sederhana tapi terkenal untuk mengelompokkan objek, clustering. Semua objek perlu diwakili sebagai seperangkat fitur numerik. Selain itu, pengguna harus menentukan jumlah kelompok (disebut sebagai k) yang ingin dia identifikasi. Setiap objek dapat dianggap diwakili oleh beberapa vektor fitur dalam ruang dimensi n, n adalah jumlah semua fitur yang digunakan untuk menggambarkan objek yang dikelompokkan. Algoritma ini kemudian secara acak memilih k poin pada ruang vektor tersebut, titik ini berfungsi sebagai pusat awal cluster. Setelah itu semua benda masing-masing ditugaskan ke pusat tempat terdekat mereka. Biasanya ukuran jaraknya dipilih oleh pengguna dan ditentukan oleh tugas belajar. Setelah itu, untuk setiap cluster, pusat baru dihitung dengan rata-rata vektor fitur dari semua objek yang ditugaskan padanya. Proses penugasan objek dan recomputing center diulang sampai proses konvergen. Algoritma ini dapat dibuktikan untuk bertemu setelah sejumlah iterasi yang terbatas. Beberapa tweak tentang jarak, pilihan pusat awal dan perhitungan pusat rata-rata baru telah dieksplorasi, serta perkiraan jumlah cluster k. Namun prinsip utamanya tetap sama. 2.2.3 Apache Mahout Untuk Klasifikasi Apache Mahout selain bisa digunakan untuk membangun sistem rekomendasi dan clustering, Apache Mahout juga bisa digunakan untuk membuat sebuah sistem klasifikasi, Klasifikasi adalah teknik pembelajaran mesin yang menggunakan data yang diketahui untuk menentukan bagaimana data baru harus diklasifikasikan ke dalam seperangkat kategori yang ada. Sebagai contoh pembuatan klasifikasi adalah sebagai berikuk, itunes aplikasi menggunakan klasifikasi untuk mempersiapkan playlist, dan juga penyedia layanan email seperti Yahoo dan Gmail menggunakan teknik ini untuk memutuskan apakah sebuah email baru harus diklasifikasikan sebagai spam. Algoritma kategorisasi melatih diri dengan menganalisis kebiasaan pengguna menandai mail tertentu sebagai spam. Berdasarkan itu, classifier memutuskan apakah email masa depan yang harus disimpan dalam kotak masuk Anda atau dalam folder spam. Apache Mahout menggunakan algoritma klasifikasi Naive Bayes. Menggunakan dua implementasi yaitu dengan standard Multinomial Naive Bayes 11
, dan juga Weight-normalized Complement Naive Bayes [7]. Dalam Apache Mahout biasa menyebut yang pertama sebagai Bayes dan yang terakhir adalah CBayes. Dimana Bayes telah lama menjadi standar dalam klasifikasi teks, CBayes adalah perpanjangan dari Bayes yang bekerja dengan sangat baik pada dataset dengan kelas miring dan telah terbukti kompetitif dengan algoritma dengan kompleksitas yang lebih tinggi seperti Support Vector Machines. 2.3 Mutithreading Programming Menggunakan Apache Mahout Hubungan antara Multithreading Programming dengan Apache Mahout dalam penelitian ini adalah sebatas pengimplemestasian Apache Mahout yang di dalam prosesnya menggunakan programming, yang dimana Apache Mahout adalah sebuah libraries atau package yang didalamnya terdapat beberapa algoritma machine learning yang bisa dijalankan dengan menggunakan bahasa pemrogamman java. Multithreading Programming disini berfungsi sebagai penambahan atau bisa dibilang seperti improvisasi dari Apache Mahout yang dimana dalam eksekusi algoritma yang ada pada Apache Mahout bisa dilakukan secara bersamaan agar proses eksekusi datanya bisa lebih cepat. Proses penggabungan Multithreading programming dengan Apache Mahout didalamnya terdapat pemecahan data yang dimana bertujuan untuk membuat data yang besar bisa dibagi menjadi beberapa data yang berukuran kecil yang data tersebut bisa diproses dalam beberapa thread. Thread dalam Multithreading programming di Apache Mahout menjadi dua bagian yaitu child thread dan main thread, child thread sebagai produksi dan main thread sebagai konsumen [5] untuk lebih jelasnya akan dijelaskan digambar yang ada dibawah. 12
Gambar 2. 1 Mutithreading Menggunanakan Apache Mahout Gambar 2.1 sudah menjelaskan bahwa yang memproses data dengan Apache Mahout adalah child thread dan main thread adalah yang membagi tugas untuk child thread dan setelah membaginya main thread akan menerima hasil dari pemrosesan data yang telah diproses oleh child thread. 2.4 Sistem Rekomendasi Recommender Sistem atau yang disebut Sistem Rekomendasi merupakan bagian dari sistem filterisasi informasi yang memberikan prediksi untuk nilai rating atau rekomendasi yang nantinya user akan diberikan suatu item (seperti buku, film, dan barang) atau elemen sosial (teman, group) yang belum user ketahui, menggunakan model yang memberikan suatu karakteristik pada item 13
atau lingkungan dari user itu sendiri. Dalam pembuatan sistem rekomendasi ada beberapa metode yang digunakan salah satu metode yang umum digunakan ada Item Based Collaborative Filtering. Item Based Collaborative Filtering merupakan metode rekomendasi yang di dasari atas adanya kesamaan antara pemberian rating terhadap suatu produk dengan produk yang dibeli. Dari tingkat kesamaan produk, kemudian dibagi dengan parameter kebutuhan pelanggan untuk memperoleh nilai kegunaan produk. Produk yang memiliki nilai kegunaan tertinggilah yang kemudian dijadikan rekomendasi [8]. Metode ini muncul sebagai solusi untuk beberapa permasalahan pada User Based Collaborative Filtering yaitu pada masalah keterbatasan (sparsity) dan skalabilitas serta masalah waktu dan memori. Pada metode Item Based Collaborative Filtering melakukan similaritas dengan membentuk suatu model similairtas secara offline yang secara otomatis akan menghemat waktu dan memori yang digunakan untuk perhitungan pada saat pengguna mengakses halaman situs [9]. Tahap awal dari metode Item Based Collaborative Filtering adalah menghitung nilai kemiripan diantara item yang telah dirating oleh user, bentuk penilaian dari user sendiri biasanya adalah berupa rating dalam skala tertentu. Untuk menghitung nilai kemiripan diantara dua item, digunakan rumus Tanimoto coefficient similarity. Berikut adalah persamaan Tanimoto coefficient yang digunakan untuk menghitung nilai kemiripan diantara item : (, ) = Nc Na + Nb Nc Dimana : Na merupakan user yang merating item a Nb merupakan user yang merating item b Nc merupakan user yang merating keduanya Tanimoto coefficient merupakan salah satu algoritma item similarity pada Apache Mahout, algoritma ini biasa disebut juga dengan Jaccard similarity coefficient, dalam persamaan ini nilai dari rating diabaikan, tingkat kesamaan 14
hanya diukur dari prefensi user. Persamaan ini menggunakan rasio perpotongan item dengan beberapa kumpulan user sebagai ukuran kesamaanya [10]. Tahapan selanjutnya yang paling penting dalam proses Collaborative Filtering adalah membuat rekomendasi item yang telah dihitung persamaanya. Setelah mendapatkan sekumpulan item yang sangat mirip berdasarkan perhitungan kemiripan, dilakukan proses kalkulasi nilai dengan cara memilih nilai persamaan yang paling besar, semakin besar nilai kemiripan maka akan semakin besar kemungkinan untuk dijadikan item rekomendasi. 2.5 Analisis Multithreading Programming Multithreading Programming memiliki kemampuan untuk mengoptimalkan kerja pada processor yang memanfaatkan thread yang ada didalam processor, Multithreading biasa digunakan pada game atau permainan. Dikarenakan dalam sebuah game terdapat lebih dari satu eksekusi perintah yang harus dikerjakan dalam satu waktu, dalam suatu contoh ini ialah disaat permainan atau game itu dimualai ada beberapa AI atau bisa disebut dengan musuh yang bergeraknya bersama sama dalam satu waktu, hal itu merupakan salah satu kemampuan Multithreading yang dimana pada kala itu ada sebuah eksekusi perintah pada player yang memainkan game tersebut dan ada beberapa musuh yang bergerak pada game tersebut pada waktu yang bersamaan. Selain biasa digunakan dalam game programming juga biasa digunakan pada web browser, karena pada web browser kita bisa membuka beberapa tab untuk melakukan browsing dikala salah satu tab masih melakukan proses pencarian. Dalam penelitian [5] Multithreading juga bisa digunakan untuk clustering. Kemudian [11] juga meneliti tentang penggunaan multithreading untuk mendeteksi ikan dibawah laut dengan menggunakan metode Fuzzy C-Means. 2.5.1 Model MultiThreading Dalam multithreading juga mempunyai beberapa model dalam pembuatanya, hal ini dipengaruhu bahwa terkadadang suatu sistem computer mempunyai lebih dari satu processor. Berikut adalah beberapa dari model multithreading. 15
a) Many-to-One Model many to one ini memetakan beberapa tingkatan pengguna thread hanya ke satu buah kernel thread. Managemen proses thread dilakukan oleh (di ruang) pengguna, sehingga menjadi efisien, tetapi apabila sebuah thread melakukan sebuah pemblokingan terhadap sistem pemanggilan, maka seluruh proses akan berhenti (blocked). Kelemahan dari model ini adalah multihreads tidak dapat berjalan atau bekerja secara paralel di dalam multiprosesor dikarenakan hanya satu thread saja yang bisa mengakses kernel dalam suatu waktu. Gambar 2. 2 many to one b) One-to-one Model one to one memetakan setiap thread pengguna ke dalam satu kernel thread. Hal ini membuat model one to one lebih sinkron daripada model many to one dengan mengizinkan thread lain untuk berjalan ketika suatu thread membuat pemblokingan terhadap sistem pemanggilan, hal ini juga mengizinkan multiple thread untuk berjalan secara parallel dalam multiprosesor. Kelemahan model ini adalah dalam pembuatan thread pengguna dibutuhkan pembuatan korespondensi thread pengguna. Karena dalam proses pembuatan kernel thread dapat mempengaruhi kinerja dari aplikasi maka kebanyakan dari implementasi model ini membatasi jumlah thread yang didukung oleh sistem. Model one to one diimplementasikan oleh Windows NT dan OS/2. 16
Gambar 2. 3 One to One c) Many-to-many Beberapa tingkatan thread pengguna dapat menggunakan jumlah kernel thread yang lebih kecil atau sama dengan jumlah thread pengguna. Jumlah dari kernel thread dapat dispesifikasikan untuk beberapa aplikasi dan beberapa mesin (suatu aplikasi dapat dialokasikan lebih dari beberapa kernel thread dalam multiprosesor daripada dalam uniprosesor) dimana model manytoone mengizinkan pengembang untuk membuat thread pengguna sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu. Model onetoone mempunyai konkurensi yang lebih tinggi, tetapi pengembang harus hatihati untuk tidak membuat terlalu banyak thread tanpa aplikasi dan dalam kasus tertentu mungkin jumlah thread yang dapat dibuat dibatasi. Gambar 2. 4 Many to many 17