Category Archives: Xpert-1
Pengetahuan Dasar Pemrograman MultiThread di C#
C# memungkinkan kita mengeksekusi code secara parallel melalui multi-threading.
Apa yg dimaksud dgn Thread
Thread adalah potongan kode yg independent (dari sebuah proses) yang di ekseskusi oleh CPU yg penjadwalanya di lakukan oleh Operating sytem . Thread dibuat oleh programmer, bagian mana saja yg akan dijadikan thread ditentukan oleh programmer. Setiap thread mendapat jatah waktu dikerjakan CPU yg disebut quantum.
Perbedaan Multi-Tasking dan Multi-treading
Multitasking adalah beberapa proses aplikasi yang dijalankan secara paralel (sebenarnya sih dijalankan bergantian secara cepat) oleh operating system contohnya anda menjalankan program ms.excel sambil membuka program musik WinAmp . Kita merasakan program excel dan winamp berjalan bersamaan , padahal sebenarnya CPU diperintahkan oleh OS mengeksekusi program excel dan winamp secara bergantian dgn kecepatan tinggi.
Multi-treading adalah beberapa tread potongan program dlm satu proses yang dilaksana secara paralel (sebenernya sih bergantian secara cepat( kecuali prosesornya multi core) dan thread dibuat oleh programmer. Contohnya adalah sebuah program server misal chat server maka ia harus melayani permintaan client yang datang hampir bersamaan secara paralel. server akan membuat thread untuk melayani tiap client yg datang. setiap client dilayani oleh satu thread. sehingga tidak ada antrian jika client yang datang banyak.
Untuk melihat Prosses dan thread yang sedang aktif di OS windows anda bisa menekan Alt+Ctrl+Del klik menu Task Manager maka akan tampil sbb:
(jika kolom thread tdk tampak , klik menu View ->select colom->di centang/check thread count.)
Perumpamaan lain multi-threading adalah Koki di restoran yang mempunyai anak buah. Untuk setiap pelanggan dilayani oleh 1 anak buah jadi pelanggan tdk perlu menunggu lama. Koki nya adalah program/proses, anak buah kokinya adalah thread.
Daur hidup thread
Thread dalam setiap saat mempunyai satu keadaan dari beberapa keadaan sebagaimana gambar berikut ini:
Beberapa contoh manfaat Thread
– Pada user interface
Sebuah proses dlm program biasanya berurutan spt ini:
Input data->proses data->menampilkan data.
tiap proses bisa jadi memakan waktu lama. jika tiap proses di atas masing masing dibuatkan sebuah thread maka ketika data sedang di proses input data bisa tetap berlangsung dan ketika proses data sedang berlangsung bisa juga di cancel karena proses diatas berjalan secara paralel.
– Pada aplikasi server
Misalkan aplikasi webserver , aplikasi ini melayani permintaan page untuk tiap permintaan client yg datang. Tiap client yang datang dilayani oleh 1 thread . jika pada saat yg hampir bersamaan datang 10 client maka akan dibuatkan 10 thread yg melayani secara bersamaan. contoh lain adalah program chat client -server.
Multitreading di C#
using System;
using System.Threading; // namespace multithreading
public class MyThread {
public static void Thread1() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
Thread.Sleep(3000);
}
}
public static void Thread2() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
Thread.Sleep(3000);
}
//Thread.Sleep(3000);
}
}
public class MyClass {
public static void Main() {
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1 ) );
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2 ) );
tid1.Start();
tid2.Start();
}
}
Memang jika di lihat hasil di layar monitor terlihat secara selang seling, tapi secara tdk terlihat ke 2 thread di proses paralel.
Hasil program diatas adalah : piring dan gelas di cuci secara bersamaan dan selesai secara bersamaan.
Kalau program diatas tanpa threading maka hasilnya akan berurutan mencuci gelas sampai selesai baru kemudian mencuci piring sampai selesai.
Program mencuci tumpukan gelas dan piring tanpa threading:
using System;
using System.Threading;
public class non_Thread {
public void cuci_gelas() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
}
}
public void cuci_piring() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
}
}
}
public class MyClass {
public static void Main() {
Console.WriteLine(“=======================================”);
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Console.WriteLine(“=======================================”);
non_Thread tid1 = new non_Thread();
tid1.cuci_gelas();
tid1.cuci_piring();
Console.WriteLine(“=======================================”);
Console.WriteLine(” Selesai…nyucinya ! “);
Console.WriteLine(“=======================================”);
}
}
Hasil dari program diatas adalah: gelas dicuci lebih dahulu sampai selseai kemudian disusul piring.
Contoh ke 2 , dua buah thread yaitu iris cabe dan ulek bawang
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication5
{
class ThreadTester
{
static void Main( string[] args )
{
// membuat thread dan beri nama.
kerjaan_thread kerjaan1 = new kerjaan_thread();
Thread thread1 = new Thread ( new ThreadStart( kerjaan1.iris_cabe ) );
thread1.Name = “iris cabe”;
kerjaan_thread kerjaan2 = new kerjaan_thread();
Thread thread2 = new Thread(new ThreadStart(kerjaan1.ulek_bawang ));
thread2.Name = “ulek bawang”;
Console.WriteLine(“================ \n”);
Console.WriteLine( “threads di aktifkan” );
Console.WriteLine(“================ \n”);
// started state -> running state
thread1.Start();
thread2.Start();
Console.WriteLine(“====================================”);
Console.WriteLine( “semua thread (pekerjaan) stand by , siap di kerjakan KOKI ” );
Console.WriteLine(“====================================”);
}
} // end class
class kerjaan_thread
{
private int waktutidur_iriscabe ;
private int waktutidur_ulekbawang ;
private static Random random = new Random();
public kerjaan_thread()
{
waktutidur_iriscabe = 2000;
waktutidur_ulekbawang = 1000;
}
//
public void iris_cabe()
{
for (int i=0; i < 4; i++)
{
Console.WriteLine(“iris cebe ke{0}”, i);
Thread current = Thread.CurrentThread;
Console.WriteLine(current.Name +” diistirahatkan selama ” + waktutidur_iriscabe + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_iriscabe);
Console.WriteLine(current.Name + “bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}
} // end method masak
public void ulek_bawang()
{
for (int i=0; i< 2; i++)
{
Console.WriteLine(“ulek bawang ke{0}”, i);
Thread current2 = Thread.CurrentThread;
Console.WriteLine(current2.Name + ” diistirahatkan selama ” + waktutidur_ulekbawang + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_ulekbawang);
// print thread name
Console.WriteLine(current2.Name + ” bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}
}
} // end
}
Untuk melihat jumlahthread yg running dgn cara saat program sedang jalan coba anda ketik alt-ctrl-del , kemudian pilih task manager
syncronisasi thread
Jika ada dua thread yg bersamaan merubah sebuah data, maka akan terjadi data tdk valid, untuk mencegah ini dibuat mekanisme
Sumber
–http://www.codeproject.com/Articles/1083/Multithreaded-Programming-Using-C
– http://www.codeproject.com/Articles/26148/Beginners-Guide-to-Threading-in-NET-Part-1-of-n
– http://www.albahari.info/threading/threading.pdf
– http://www.techrepublic.com/article/a-beginners-guide-to-threading-in-c/1044970
Pengetahuan Dasar C# .Net Micro Framework untuk microcontroller ARM (modul Netduino)
Apa itu .Net Micro Framework?
.Net Micro Framework adalah flatform NET untuk pemrograman embeded yg terintegrasi dengan Visual studio , menggunakan bahasa pemrograman C#.
Kelebihan .Net Micro:
- Easily develop powerful, interactive, and complex applications
- Securely connect devices over wired or wireless protocol
- Develop full solutions using .NET including devices, servers, and the cloud
- Rich base class library
Sofware yg dibutuhkan
1. Microsoft Visual C# Express 2010
2. Microsoft .NET Micro Framework v4.1 SDK
3. Netduino1 SDK 4 (disediakan oleh SecretLabs)
(jika anda menggunakan modul selain netduino maka kebutuhan software no 3 juga di sesuaikkan dgn modul yg anda gunakan)
Hardware
Modul hardware yang kita gunakan adalah Netduino sebuah open-source electronic platform yg menggunakan .NET Micro Framework . Rangkaiannya ada disini . Kalau mau beli sepertinya sudah ada di prasimax.
saat ini Netduino ada 3 model
1. Netduino
2. Netduino mini
3. Netduino plus
Membuat Project Baru
1. Buka Visual Studio atau C# express
2. New Project
3. Pilih template Micro Framework spt tampak dibawah ini , sesuaikan dgn modul netduino yg anda miliki.
5. Klik program.cs
copy dan pasta program C# Net Micro Netduino berikut ini.
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
public class BlinkingLed
{
public static void Main()
{
var ledPort = new OutputPort(Pins.ONBOARD_LED, false);
while (true)
{
ledPort.Write(true); // LED on
Thread.Sleep(500); // delay 500 ms
ledPort.Write(false); // LED off
Thread.Sleep(500); // delay 500 ms
}
}
}
6. klik menu Debug->Build Solution
Jika sukses maka kita bisa melanjutkan dengan mengirim program yang sudah di buld ke Modul melalui port komunikasi USB.
Langkah mentrasfer program yg sudah dibuild ke modul sebagai berikut
1. klik kanan pada project dan klik properties
2. klik tab menu .NET Micro Framework. kemudian set spt gambar antara lain:
- Configuration : Active (Debug)
- Platform : Active (Any CPU)
- Transport : USB
- Device : select your Netduino from the drop-down list.
- Generate native stubs for internal methods : unchecked
Kalau pada isian text boxt “Device” kosong , kita harus mengkoneksi modul netduino ke PC kita dulu lewat port USB nya.
3. Klik menu Debug-Start Debugging , maka program akan ditransfer ke Modul Netduino.
Untuk menghapus program di modul gunakan MFDeploy lokasinya ada di :
C:\Program Files\Microsoft .NET Micro framework\v4.1\Tools\MFDeploy.exe
Langkah langkah Menghapus program di Modul Netduino
1. Buka MFDeploy pastikan pilih “USB” pada pilihan Device spt pd gambar diatas.
2. Cabut dan pasang kembali USB cable sambil tombol di netduino ditekan.
3. lepas tombol dan klik erease pada MFDeploy.
selesai.
Contoh 2 membaca penekanan tombol
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace ButtonApp
{
public class Program
{
public static void Main()
{
// write your code here
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
InputPort button = new InputPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled);
bool buttonState = false;
while (true)
{
buttonState = button.Read();
led.Write(!buttonState);
}
}
}
}
Untuk memperdalam C# .Net Micro Framework ada baiknya anda pelajari juga dasar bahasa pemrograman C# .
sumber