Rabu, 25 Oktober 2017

Thread untuk OS Android

Salah satu hal yang sangat penting dalam pembuatan berbagai aplikasi termasuk aplikasi berbasis mobile adalah penggunaan thread. Thread adalah suatu struktur pengendali program yang dapat dijalankan secara background, dan cara kerjanya adalah seperti listener. Sebagai contoh penggunaan pada sebuah perangkat SMS, maka paling tidak, ada dua buah thread, yaitu thread untuk mengirim pesan dan thread untuk menerima pesan. Penggunaan thread sangat bagus untuk menghindari adanya deadlock pada suatu layanan.
                                    
Dengan semakin umumnya penggunaan chip multicore  pada smartphone, penggunaan thread yang memungkinkan beberapa task berjalan secara paralel semakin penting untuk meningkatkan kinerja app. Multicore sudah disupport Android sejak versi HoneyComb (3.0). Selain itu, app Android yang terlalu lama berproses dan membuat user interfacehang”  akan terkena error ANR (Application Not Responding). Thread dapat digunakan untuk mengatasi ini dengan memindahkan aktivitas yang lama pada thread yang terpisah.
Contoh multithread pada desktop adalah aplikasi Word di Windows. Saat kita membuka Word dan melakukan penyimpanan, kita secara bersamaan masih dapat mengedit dokumen. Kedua aktivitas ini dilakukan oleh aplikasi yang sama tapi dalam thread yang terpisah.

Sebelumnya perlu dibedakan antara thread dan proses. Thread dan proses sama-sama merupakan urutan kode yang dieksekusi. Pada Android, yang dasarnya adalah Linux, setiap app yang dijalankan berada di proses yang terpisah. Satu proses kemudian dapat memiliki satu atau lebih thread. Thread-thread di dalam proses yang sama berbagi memory, walaupun setiap thread punya register dan stack sendiri. Proses independen satu sama lain, sedangkan thread-thread  pada proses yang sama saling terkait seperti gambar di bawah ini












Kenapa menggunakan thread? karena untuk men-create proses mahal dari sisi resources dibandingkan thread dan komunikasi antar thread lebih mudah dibandingkan antar proses. Kasus yang menarik di desktop adalah browser Chrome vs Firefox. Setiap tab pada Chrome menggunakan proses yang berbeda, sedangkan Firefox menggunakan thread yang berbeda untuk setiap tab. Coba lihat task manager saat membuka banyak tab di Chrome, akan banyak proses bernama Chrome.exe.  Pembuat Chrome beralasan dengan arsitektur seperti ini, jika salah satu tab “hang” maka tidak akan mempengaruhi tab yang lain. Tapi efek sampingnya, Chrome membutuhkan lebih banyak memori dibandingkan Firefox. Firefox sebenarnya juga menggunakan multi proses, tapi hanya untuk plugin, karena plugin sering menjadi sumber masalah. 

Terlepas dari keunggulannya, penggunaan multithread atau multiproses juga dapat menimbulkan masalah, misalnya sinkronisasi, deadlock, race condition dan  starvation. Program juga lebih sulit didebug dan kadang malah kinerjanya lebih jelek.  Walaupun Java dan Android telah menyediakan berbagai library untuk memudahkan pembuatan program multithreading, tetap saja ini bukan hal yang mudah.

Kembali ke Android, saat setiap app dijalankan maka app tersebut memiliki thread utama yang disebut main thread atau UI thread. UI thread ini mengatur tampilan, menerima event dan sebagainya. Aturan yang harus dipegang adalah:
1.    Jangan memblok UI thread.  Misalnya saat user menekan tombol, maka app menjalankan program yang loop sejuta kali sehingga membuat user interface macet. Ini akan berakibat muncul error ANR (App Not Responding). Resources pada smartphone jauh lebih terbatas daripada PC/laptop, sehingga aturan ini lebih ketat.
2.    Jangan mengakses komponen UI di luar UI thread. Misalnya ada thread kedua dan thread ini mengakses TextView, Button dsb. Ini dapat menyebabkan error yang tidak terduga.

Ada beberapa cara teknik paralelisasi di Android yaitu : AsyncTask, IntentServices dan Java thread
Mana yang lebih tepat? tergantung masalahnya.

AsyncTask

APA ITU ASYNCTASK?

AsyncTask adalah class yang disediakan Android untuk memudahkan  programmer membuat task yang dijalankan di-background. AsyncTask cocok untuk proses background yang relatif sederhana dan pendek. Misalnya saat mendowload objek dari internet, dan dalam prosesnya UI akan menampilkan kemajuan download.

Contoh : penggunaan AsyncTask saat mengambil data dari API. Proses pengambilan datanya terjadi di background dan di UI nya hanya menampilkan ProgressDialog. Ketika semua data sudah di ambil, maka secara bersamaan akan ditampilkan.
Contoh lain, saat kita mendownload aplikasi, lagu, video atau apapun dari internet, proses tersebut juga menggunakan AsyncTask di UI hanya menampilkan persentase downloadingnya (1% – 100%).

PARAMETER DALAM ASYNTASK
AsyncTask mempunyai tiga parameter yaitu :
1.    Params adalah array dari parameter yang digunakan dalam metode doInBackground().
2.    Progress adalah adalah parameter untuk progress bar yang digunakan oleh metode onProgressUpdate ().
3.    Result adalah parameter dari hasil operasi yang dilakukan oleh metode doInBackground() dan diberikan ke metode  onPostExecute() sebagai parameternya.
METODE-METODE DALAM ASYNCTASK
Dalam proses AsyncTask terdapat beberapa method yang digunakan, antara lain :

1.    onPreExecute(),
Method ini dipanggil sebelum task dikerjakan, biasanya digunakan untuk inisiasi users.
2.    doInBackground(Void… params),
Pada method ini proses thread berjalan, proses pengiriman/pengambilan data terjadi disini. Prosesnya berjalan dibackground. Method ini langsung berjalan setelah onPreExecute() berjalan. Pada proses gunakan publishProgress(params)  untuk mengupdate progressnya sudah sampai mana saja. Tapi ingat, jangan menambahkan ProgressDialog/ProgressBar di method ini. Kalian hanya boleh menambahkan ProgressBar/ProgressDialog di method onProgressUpdate(String… values).
3.    onProgressUpdate(String… values),
Method ini digunakan ketika di method doInBackground(Void.. params) telah memanggil method publishProgress(params). Di method ini kalian bisa tampilkan UI untuk pemberitahuan bahwa pengambilan/pengiriman data sedang berlangsung. Kalian bisa gunakan progressBar atau ProgressDialog.
4.    onPostExecute(Void aVoid),
Method ini digunakan untuk mengupdate User Interface ketika proses doInBackground(Void… params) telah selesai.
                  
MENGGUNAKAN ASYNCTASK

Dengan AsyncTask, kita bisa melakukan pekerjaan asinkron pada antarmuka pengguna. AsyncTask memblokir operasi di thread pekerja kemudian mempublikasikan hasilnya di thread UI, tanpa mengharuskan kita untuk menangani sendiri thread dan/atau penangan sendiri.
Untuk menggunakannya, kita harus menjadikan AsyncTask sebagai subkelas dan mengimplementasikan metode callback doInBackground() yang berjalan di pool thread latar belakang. Untuk memperbarui UI, kita harus mengimplementasikan onPostExecute(), yang mengirim hasil dari doInBackground() dan berjalan di thread UI, jadi kita bisa memperbarui UI dengan aman. Kemudian kita bisa menjalankan tugas dengan memanggil execute() dari thread UI.
IntentServices
Service cocok untuk task yang membutuhkan waktu lama, berjalan di background dan tidak membutuhkan akses ke user interface. Misalnya saat app mengirimkan data ke server, user dapat menekan tombol “send” dan kemudian melanjutkan menggunakan app untuk yang lain. Contoh yang lain adalah streaming musik di backround dan download.
Perbedaan utama antara Services dengan Asynctask adalah Asynctask cocok untuk task yang berjalan di background yang terkait dengan user interface sedangkan service cocok untuk task background yang independen terhadap user interface. Untuk memberikan notifikasi ke user dari service, dapat digunakan toast atau notification bar. Perbedaan lain dengan AsyncTask adalah service mendapat prioritas lebih tinggi sehingga lebih kecil kemungkinannya untuk dimatikan, walaupun jika kehabisan memory service dapat dimatikan untuk kemudian direstart lagi.
Fungsi service ada dua: pertama meminta sistem menjadwalkan task di background yang akan terus berjalan sampai service berhenti. Fungsi kedua adalah menyediakan layanan pada app lain. Service bukan thread dan berada di thread utama (UI thread). Itu sebabnya kita tetap perlu membuat thread terpisah di service untuk task yang panjang karena tetap dapat menyebabkan error ANR.
Seperti halnya AsyncTask, Android menyediakan IntentService untuk memudahkan programmer menggunakan service. IntentService secara otomatis akan membuat thread baru (disebut worker thread) dan menangani antrian pemanggilan service (jika service dipanggil berkali-kali). Intinya programmer tidak perlu lagi memikirkan pengelolaan thread di dalam service.
Untuk menggunakan IntentService, extends kelas IntentService dan override method create() dan onHandleIntent(). Task yang berjalan di backround diletakkan di onHandleIntent().
Tetapi kita perlu membuat kelas khusus untuk menampilkan toast terlebih dulu. Toast tidak dapat langsung digunakan karena onHandleIntent berjalan di worker thread, bukan UI thread. Oleh karena itu perlu digunakan handler. Handler adalah objek yang dapat digunakan untuk berkomunikasi antar thread. Handler akan berada pada thread yang membuatnya. Karena service dicreate oleh UI thread, maka handler otomatis juga ada di UI thread. Jadi kita bisa menggunakan handler untuk berkomunikasi dari worker thread ke UI thread.
Java Thread
Cara lain melakukan proses di background adalah menggunakan thread seperti halnya yang disediakan Java. Cara ini lebih fleksibel daripada AsyncTask, tetapi lebih sulit. Sebenarnya Asynctask, IntentService dan lain-lain dibuat menggunakan library java thread ini.
Untuk membuat thread baru, dapat digunakan kelas Thread. Ada dua cara menjalankan thread, pertama dengan menggunakan objek Runnable, kedua dengan meng-override method Run di kelas Thread. .
Cara pertama, menggunakan Runnable. Runnable adalah kelas yang berisi potongan code yang harus dijalankan.
Cara yang kedua adalah tanpa runnable, dengan meng-extends kelas Thread.

Handler


Cara lain untuk berkomunikasi dengan UI thread adalah dengan Handler.  

Handler adalah objek yang digunakan untuk berkomunikasi antar thread.  Di UI thread kita buat handler, lalu objek handler ini di-pass ke thread. Thread kemudian berkirim pesan melalui handler.


Sumber Referensi:

Chughn Anupam. Android AsyncTask Example Tutorial. Diakses dari https://www.journaldev.com/ pada 23 Oktober 2017 jam 16.10 WIB


Laksito Arif. ( 2012). AsynTask di Android. Amikom.

Anonim. (2012). Proses dan Thread.  Diakses dari https://developer. android.com pada 23 Oktober 2017 jam 16.30 WIB.

Anonim. thread-vs-process. Diakses dari https://sites.google.com/site/ sureshdevang. pada 23 Oktober 2017 jam 16.50 WIB pada 23 Oktober 2017 jam 16.50 WIB

Sabtu, 07 Oktober 2017

REVIEW VIRTUAL MACHINE ( Microsoft Hyper-v)

Oke sekarang kita bakalan bahas mengenai Virtual Machine dan Merivew salah satu software Virtual Mesin. So ini adalah membahasan mengenai virtual mesin secara singkat yaa, karna intinya adalah untuk menriew salah satu Software nya, hehe.😀

Virtual machine?

Jadi, Virtual machine itu adalah sebuah perangkat lunak atau perangkat virtual yang akan memvirtualisasi kan hardware secara lengkap seperti sistem aslinya. Jadi kita dapat menjalankan berbagai macam OS tanpa harus menambahkan hardware, hanya dengan simulasi saja. Virtual Mesin ini akan membuat kumpulan perangkat virtual seperti BIOS, Harddisk dan sebagainya.

Fungsinya?

Virtual Mesin ini mempunyai fungsi, salah satunya adalah agar kita dapat mencoba sistem operasi yang kita inginkan, men uji coba software dsb.

Kelebihan dan kekurangannya?

Virtual Mesin ini pun mempunyai beberapa kelebihan yaitu dapat meningkatkan pemanfaatan hardware mesin anda, menurunkan biaya modal dan operasional, anda juga dapat menjalankan program lain di virtual mesin yang belum tentudi OS yang sama dengan mesin host misalnya menjalankan Windows atau Mac pada mesin host Linux begitupun sebaliknya.
Disamping ia mempunya kelebihan pasti ia mempunyai kekurangan seperti halnya, anda akan cukup kesulitan mengenai sistem penyimpannya, untuk pengimplementasian nya pun cukup sulit.

Apa aja sih software virtual machine?

Software VM itu sebenarnya cukup banyak, salah satunya adalah VirtualBox, VMWare Player,Windows Virtual PC, Qemu, Proxmox, Microsoft hyper V, dan sebagainya.
Jadi itu penjelasan singkat mengenai virtual machine, sekarang kita akan membahas mengenai salah satu software virtual machine itu sendiri yaitu Microsoft hyper-v.


 Microsoft Hyper-V





Microsoft Hyper-V ini merupakan teknologi virtualisasi yang dibuat oleh Microsoft, dan sebelumnya dikenal dengan nama Windows Server Virtualization.
Hyper-V adalah virtualisasi berbasis hypervisor. Sedang hypervisor dikenal juga sebagai virtual machine manager (VMM). VMM sendiri adalah salah satu dari teknik hardware virtualization yang memungkinkan beberapa sistem operasi (dikenal sebagai guest) yang berjalan diatas sebuah host komputer. Guest pada dasarnya akan berbentuk sebagai file.
Sistem operasi yang didukung: Linux dan mesin virtual FreeBSD untuk Hyper-V di Windows, dan juga didukung oleh Windows guest operating system untuk Hyper-V pada Windows Server.

Ada dua model virtualisasi server yang disediakan oleh Microsoft. Yaitu :

- Hyper-V yang merupakan role atau bagian dari Microsoft Windows Server 2008 R2 (as a role). Pada model ini hypervisor menjadi bagian dari sistem operasi host. Sehingga sistem operasi host berfungsi sebagai perantara antara hypervisor dan perangkat keras.

- Hyper-V yang merupakan role atau bagian dari Microsoft Windows Server 2008 R2 (as a role). Pada model ini hypervisor menjadi bagian dari sistem operasi host. Sehingga sistem operasi host berfungsi sebagai perantara antara hypervisor dan perangkat keras.

Hyper-V ini sendiri memiliki beberapa fungsi seperti:
Dari segi teknis, Hyper-V dapat digunakan untuk melakukan pengujian terhadap sebuah pengembangan teknologi informasi.
Selain itu, dengan Hyper-V maka proses terhadap standarisasi atas pemakaian perangkat lunak dan perangkat keras makin mudah dilakukan. Hal ini menjadikan pihak administrator pada TI jadi makin mudah melaksanakan tugas-tugasnya.
Hyper-V juga bersifat sangat fleksibel menjadikan penentuan atas spesifikasi pada perangkat keras bisa dengan mudah dikurangi dan ditambah menurut kebutuhan.
Melalui Hyper-V perusahaan dapat menciptakan sistem komputerisasi yang terpusat dan meminimalkan pemakaian komputer desktop.
Hyper-V dapat membantu kita dalam beberapa hal yaitu:
·         Menetapkan atau memperluas lingkungan awan pribadi. Menyediakan layanan TI on-demand yang lebih fleksibel dengan memindahkan atau memperluas penggunaan sumber daya bersama dan menyesuaikan penggunaan sesuai permintaan.
·         Gunakan perangkat keras Anda lebih efektif. Mengkonsolidasikan server dan beban kerja ke komputer fisik yang lebih sedikit dan lebih kuat untuk menggunakan lebih sedikit daya dan ruang fisik.
·         Tingkatkan kontinuitas usaha. Minimalkan dampak downtime yang dijadwalkan dan tidak terjadwal dari beban kerja Anda.
·         Menetapkan atau memperluas infrastruktur virtual desktop (VDI). Gunakan strategi desktop terpusat dengan VDI dapat membantu Anda meningkatkan ketangkasan bisnis dan keamanan data, serta mempermudah kepatuhan terhadap peraturan dan mengelola sistem operasi dan aplikasi desktop. Menyebarkan Host Virtualization Hyper-V dan Remote Desktop (Host Virtualisasi RD) pada server yang sama untuk membuat virtual desktop pribadi atau kolam virtual desktop tersedia bagi pengguna Anda.
·         Buatlah pengembangan dan uji yang lebih efisien. Mereproduksi lingkungan komputasi yang berbeda tanpa harus membeli atau merawat semua perangkat keras yang Anda perlukan jika hanya menggunakan sistem fisik.
Fitur apa yang dimiliki Hyper-V?

  • Hyper-V menawarkan banyak fitur. Ini adalah ikhtisar, dikelompokkan berdasarkan fitur yang disediakan atau membantu Anda melakukannya
  • Komputasi lingkungan - Mesin virtual Hyper-V mencakup komponen dasar yang sama seperti komputer fisik, seperti memori, prosesor, penyimpanan, dan jaringan. Semua bagian ini memiliki fitur dan pilihan sehingga Anda dapat mengkonfigurasi berbagai cara untuk memenuhi kebutuhan yang berbeda. Penyimpanan dan jaringan masing-masing bisa dianggap kategori sendiri, karena banyak cara Anda bisa mengkonfigurasinya.
  • Pemulihan bencana dan cadangan - Untuk pemulihan bencana, Hyper-V Replica menciptakan salinan mesin virtual, yang dimaksudkan untuk disimpan di lokasi fisik lain, sehingga Anda dapat mengembalikan mesin virtual dari salinannya. Sebagai cadangan, Hyper-V menawarkan dua tipe.One menggunakan status tersimpan dan yang lainnya menggunakan Volume Shadow Copy Service (VSS) sehingga Anda dapat membuat backup aplikasi yang konsisten untuk program yang mendukung VSS.
  • Optimalisasi - Setiap sistem operasi pendukung tamu memiliki seperangkat layanan dan driver khusus, yang disebut layanan integrasi , yang mempermudah penggunaan sistem operasi pada mesin virtual Hyper-V
  •  Portabilitas - Fitur seperti migrasi langsung, migrasi penyimpanan, dan impor / ekspor memudahkan untuk memindahkan atau mendistribusikan mesin virtual.
  • Konektivitas jarak jauh - Hyper-V mencakup Virtual Machine Connection, alat koneksi jarak jauh untuk digunakan dengan Windows dan Linux. Tidak seperti Remote Desktop, alat ini memberi Anda akses konsol, sehingga Anda dapat melihat apa yang terjadi di tamu bahkan saat sistem operasi belum di-boot.
  • Keamanan - Mesin virtual boot dan terlindung aman membantu melindungi terhadap perangkat lunak perusak dan akses tidak sah lainnya ke mesin virtual dan datanya.

Kebutuhan sistem dan spesifikasi

Untuk dapat mengimplementasikan virtualisasi server berbasis Microsoft Hyper-V, dibutuhkan beberapa syarat sebagai berikut:

- Sistem operasi yang berfungsi sebagai Host. Gunakan sistem operasi terbaru seperti Microsoft Windows Server 2008 R2 SP1.

- Prosesor yang digunakan adalah x86-64 (prosesor 64 bit)

- Prosesor mempunyai kemampuan hardware assisted virtualization. Jika menggunakan prosesor intel dikenal dengan istilah intel-vt sedangkan untuk prosesor AMD dikenal dengan AMD-V.

- Memori minimum untuk host 2 GB

- Sistem operasi guest :

·         Hyper-V mendukung sampai 4 prosesor

·         Mendukung sampai 384 VM per sistem

·         Mendukung sistem operasi 32-bit dan 64-bit

Hyper-V adalah teknologi virtualisasi berbasis hypervisor. Hyper-V menggunakan hypervisor Windows, yang membutuhkan prosesor fisik dengan fitur tertentu. 
Pada kebanyakan kasus, hypervisor mengelola interaksi antara perangkat keras dan mesin virtual. Akses hypervisor-controlled ke perangkat keras ini memberi mesin virtual lingkungan yang terisolasi dimana mereka beroperasi. Dalam beberapa konfigurasi, mesin virtual atau sistem operasi yang berjalan di mesin virtual memiliki akses langsung ke grafis, jaringan, atau perangkat keras penyimpanan.

Hyper-V mengimplementasikan isolasi mesin virtual dalam hal partisi . Partisi adalah unit isolasi yang logis, didukung oleh hypervisor, di mana setiap sistem operasi tamu dijalankan. Contoh hypervisor harus memiliki setidaknya satu partisi induk , menjalankan versi Windows Server yang didukung (2008 dan yang lebih baru). Tumpukan virtualisasi berjalan di partisi induk dan memiliki akses langsung ke perangkat keras. Partisi induknya kemudian menciptakan partisi anak yang menampung OS tamu.Partisi induk membuat partisi anak menggunakan API hypercall , yang merupakan antarmuka pemrograman aplikasi yang terpapar oleh Hyper-V. 
Partisi anak tidak memiliki akses ke prosesor fisik, juga tidak menangani interupsi sebenarnya. Sebagai gantinya, ia memiliki pandangan virtual prosesor dan berjalan di Guest Virtual Address , yang, tergantung pada konfigurasi hypervisor, mungkin tidak harus menjadi keseluruhan ruang alamat virtual .Bergantung pada konfigurasi VM, Hyper-V hanya bisa mengekspos sebagian dari prosesor ke setiap partisi. Hypervisor menangani interrupts ke prosesor, dan mengalihkannya ke partisi masing-masing menggunakan Physical Synthetic Interrupt Controller (SynIC). Perangkat keras Hyper-V dapat mempercepat terjemahan alamat Ruang Alamat Virtual Tamu dengan menggunakan terjemahan alamat tingkat kedua yang disediakan oleh CPU, disebut EPT pada Intel dan RVI (dahulu NPT) pada AMD.
Partisi anak tidak memiliki akses langsung ke sumber daya perangkat keras, namun memiliki pandangan virtual tentang sumber daya, dalam hal perangkat virtual . Setiap permintaan ke perangkat virtual dialihkan melalui VMBus ke perangkat di partisi induk, yang akan mengelola permintaan. VMBus adalah saluran logis yang memungkinkan komunikasi antar-partisi. Respon juga dialihkan melalui VMBus. Jika perangkat di partisi induk juga perangkat virtual, maka akan diarahkan lebih jauh sampai mencapai partisi induk, di mana ia akan mendapatkan akses ke perangkat fisik. Partisi induk menjalankan Virtualization Service Provider (VSP), yang terhubung ke VMBus dan menangani permintaan akses perangkat dari partisi anak. Perangkat virtual partisi anak menjalankan Klien Virtualization Service (VSC) secara virtual, yang mengarahkan ulang permintaan ke VSP di partisi induk melalui VMBus. Seluruh proses ini transparan ke OS tamu.
Perangkat virtual juga dapat memanfaatkan fitur Windows Server Virtualization, yang diberi nama Enlightened I / O , untuk penyimpanan, jaringan dan subsistem grafis, antara lain. I / O yang tercerahkan adalah penerapan protokol komunikasi tingkat tinggi yang sadar-intuitif, seperti SCSI , yang memungkinkan melewati lapisan emulasi perangkat dan memanfaatkan VMBus secara langsung. Hal ini membuat komunikasi lebih efisien, namun membutuhkan OS tamu untuk mendukung Enlightened I / O.



Sekian penjelasan singkat, apabila ada kesalahan mohon maaf.😌





Referensi :
http://blog.dsolusindo.com/cara-menggunakan-hyper-v/
http://muhammadsofjanrizal.blogspot.co.id/2014/04/contoh-contoh-virtual-machine-dan.html
http://www.cloudindonesia.or.id/?s=Hyper-V
https://en.wikipedia.org/wiki/Hyper-V