BİR İPLİK OLUŞTURAN VE BU İPLİĞİN SONLANMASINI pthread_join( ) SİSTEM ÇAĞRISIYLA BEKLEYEN İPLİK(C++,İSLETİM SİSTEMLERİ)

#include <iostream>
#include <pthread.h>
using namespace std;
void *iplik_islemi(){
    Cout<<"Iplik"<<endl;
}
int main() {
    pthread_t iplik;
    pthread_create(&iplik,NULL,iplik_islemi,NULL);
    cout<<"İpliğin sonlanmasını bekle"<<endl;
    pthread_join(iplik,NULL);
    cout<<"İplik Sonlandı";

}

wait( ) Sistem Çağrısı İle Çocuk Prosesi Bekleme (C++,İSLETİM SİSTEMLERİ)

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;

int main( ){
   pid_t pid;
   int statu; //Çocuk prosesin sonlanma değeri
   pid= fork( );
   if(pid==0)
      cout<<"Ben Cocuk Proses"<<endl;
   else
      {
       cout<<"Ben Anne Proses Bekledim..."<<endl;
       wait(&statu);
}


}

clone( ) Çağrısı İle Yeni Proses Oluşturma (C++,İSLETİM SİSTEMLERİ,LİNUX)

#include <sched.h>
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>

#define STACK_SIZE 1024

int new_process (){
    cout<<"My new process..."<<endl;
    return 1;
}
int main( )
{
    int pid;
    void *stack; //Cocuk prosesin yığın işaretçisi
    stack=malloc(STACK_SIZE); //Bellek alanı alma
    if(stack==0){
       cout<<"Bellek tahsis hatasi"<<endl;
       exit(1);
    }
pid=clone(&new_process,(char*) stack+STACK_SIZE,0,0);//clone-->>İle yeni proses oluşturuldu...
pid=waitpid(pid,NULL,0);//Wait a child process
cout<<"CHILD PROCESS ENDED..."<<endl;
free(stack); //Belleği Bırak

}

fork( ) Sistem Çağrısı ve Yeni İplik Oluşturma Çağrısı(C++,İŞLETİM SİSTEMLERİ)

#include <iostream>
#include <sys/types.h>
#include <unistd.h>
using namespace std;
int main(){
   pid_t pid;
   pid=fork();
   if(pid==0)
     cout<<"Merhaba ben cocuk proses"<<endl;
   else
     cout<<"Merhaba ben anne proses"; 

}

//Şimdide yukarıda oluşturduğumuz prosese bir iplik ekleyelim

#include <iostream>
#include <pthread.h>
using namespace std;

void *iplik_islemleri(void *i)
{
   cout<<"İplik çalışmaya başladı..."<<i<<endl;
}

int main(){
//İplik bilgilerini saklamak için pthread_t tipinde bir değişken
pthread_t iplik;

int iplik_no,i=1;

iplik_no=pthread_create(&iplik,NULL,iplik_islemleri,(void*)i);
//iplik oluşturuldu...
//ipliğin sonlanmasını bekliyoruz...
pthread_join(iplik,NULL);

}

SQL DİSTİNCT KOMUTU

DİSTİNCT KOMUTUMUZ TEKRARLI KAYITLARIMIZIN GÖSTERİLMEMESİNİ SAĞLIYOR.

ÖRNEĞİN VERİ TABLOMUZDA AHMET ADINDAN YÜZLERCE KİŞİ VAR VE BİZ SADECE

BİR TANESİNİN GÖSTERİLMESİNİ İSTİYORUZ O ZAMAN DİSTİNCT KOMUTUNU

KULLANMAMIZ GEREKECEKTİR.

SQL DELETE (SİLME) KOMUTU

SON DML KOMUTUMUZ OLAN DELETE...



SQL UPDATE KOMUTU

SQL UPDATE KOMUTU

KOMUTLARIMIZIN ANLATIMI BİTİNCE BİR SÜRÜ ÖRNEK ÇÖZECEĞİZ İYİ

ÇALIŞMALAR.

SİSTEM ÇAĞRILARI PROSES VE İPLİK YÖNETİM ÇAĞRILARI -4-

4-YÜRÜTME ÇAĞRILARI
   Yürütme işlemleri exec() grubu çağrıları ile gerçekleşir.<unistd> kütüphanesi gerekir.


ÖRNEK

   execl() sistem çağrısını kullanarak aynı dizideki kodu verilen merhaba.cpp programının çalıştırılabilir hali olan merhaba isimli dosyayı çalıştıracak kod parçasını yazalım.

#include <iostream>
using namespace std;
int main()

{

cout<<"Merhaba..."<<endl;
}
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{

execl("merhaba","meraba",NULL);
}
5-KONTROL GRUBU ÇAĞRILARI
  brk(void *veri_bolum_bitisi) ve setsid() çağrıları prosesler için özellik ayarlama çağrılarıdır.(<unistd.h>)

Proseslerin bellekleri 3 kısımdan oluşur.Bunlar işlemcinin temel bellek kesimleriyle aynı mantıkta bölümlü bir yapıdadır.

İlk kısım ---Program kodunun olduğu kod kesimi

İkinci kısım---Verilerin ve değişkenlerin yer aldığı veri kesimi

Üçüncü kısım---Yığının yer aldığı yığın kesimidir.

*******************************************************************************
ÖRNEK

setsid() sistem çağrısını kullanarak kendi SID sini belirleyen bir çocuk prosesin C++ kodunu yazalım.

#include <iostream>
#include <unistd.h>

int main (int argc,const char *argc[])
{

pid_t pid,sid;
pid=fork(); //Forklayarak ana prosesten ayrılıyoruz.
if(pid>0)
{
cout<<"Ana proses çıkar..."<<endl;
return 0; //ana prosesi sonlandırdık
}
sid=setsid(); //Kendi SID imizi oluşturup yetim proses olmaktan kurtuluyoruz.
sleep(5);
cout<<"BITIS..."<<endl;
return 0;

}



























SİSTEM ÇAĞRILARI PROSES VE İPLİK YÖNETİM ÇAĞRILARI -3-

exit(int statu) sistem çağrısı çalışan bir prosesin bitiminde kullanılır.Kütüphanesi <stdlib.h> tır.

Çıkış durumunu gösteren statu parametresi aynı zamanda waitpid() sistem çağrısına parametre olarak döner.

statu parametresinin düşük değerlikli baytı 0 ise normal sonlanma 0 dan farklı bir değer ise hata ile sonlanma anlamına gelir.Yüksek değerlikli ise çocuk prosesin çıkış durumudur.

ÖRNEK

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
 {
cout<<"CALISAN PRO..."<<endl;

exıt(EXIT_SUCCESS);

cout<<"Bu kod çalışmadı...";

}

pthread_join(pthread_t iplik,void **deger) çağrısı ,ilk parametrede belirtilen ipliğin sonlanmasını beklemek için kullanılmaktadır.<pthread.h> başlık dosyasında tanımlıdır.

ÖRNEK
#include <iostream>
#include <pthread.h>
using namespace std;
void *iplikislemi(){
cout<<"IPLIK"<<endl;



}
int main()
{
pthread_t iplik;

pthread_create(&iplik,NULL,iplikislemi,NULL);
cout<<"ipliğin sonlanmasın bekle !!! "<<endl;
cout<<"Iplik sonlandı..."<<endl;

}

pthread_exit(void *ptr) ise ipliğin sonlandırma çağrısıdır.,<pthread.h> başlık dosyasında tanımlıdr.


ÖRNEK :
Bir iplik oluşturup bu ipliğin pthread_exit() sistem çağrısıyla sonlandığı iplik ve ana program kodlarını yazalım.

#include <pthread.h>
#include<iostream>
using namespace std;
void *iplik_islem()
{
cout<<"Iplik islemi"<<endl;
pthread_exit(0);

}

int main()
{
pthread_t iplik;

pthread_create(&iplik,NULL,iplik_islemi,NULL);
pthread_join(iplik,NULL);


}

SİSTEM ÇAĞRILARI PROSES VE İPLİK YÖNETİM ÇAĞRILARI -2-

3-BEKLEME VE SONLANMA ÇAĞRILARI

   Proseslerin bekleme ve sonlanma çağrıları : wait(),waitpid() ve exit() tir
   İpliklerde ise pthread_join ve pthread_exit kullanılır.

wait(int *statu) ve waitpid(pid_t pid,int *statu,int secenekler) çağrıları için <sys/types.h> ve <sys/wait.h> kütüphaneleri gerekiyor.

waitpid() çağrısı kullanılarak istenen bir çocuk prosese özel veya çok çocuklu bir yapı için herhangi bir çocuk prosesin bitişi beklenebilir.

Eğer özel bir proses beklenecekse o prosesin proses tanımlayıcı numarası(pid) ilk parametre olarak girilir.Herhangi bir çocuk prosesin sonlanması beklenecekse -1 değeri girilir.

Proses sonlandığında waitpid() in ikinci parametresi olan ve adres değeri alan statü değişkeni sonlanan çocuk prosesin çıkış değerini alır.

waitpid() çağrısının son parametresi olan özellikler ise 0 veya OR larla değerler alabilir.

WNOHAN,WUNTRACED,WCONTINUED...

ÖRNEK

Bir anne ve çocuk proses oluşturup anne prosesin çocuk prosesin sonlanmasını wait çağrısı ile beklediği programı yazalım.

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main()

{
pid_t pid; //Fork çağrımızda geri dönüş değeri için

int statu; //Çocuk prosesin sonlanma değerinin alınması için

pid=fork(); //Çocuk prosesi oluşturduk.
if(pid==0)
cout<<"Merhaba la ben çocuk proses nasılsın"<<endl;
else{
cout<<"Selam ben anne proses"<<endl;
wait(&statu); //Prosesin bitmesini bekliyoruz.
}


}
ÖRNEK 2

Bir anne ve çocuk proses oluşturup anne prosesin çocuk prosesin çocuk prosesin sonlanmasını waitpid() çağrısı ile beklediği programı yazalım

#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main()
{
pid_t  pid ,  pid_w ; //fork() ve waitpid() çağrıları için
int statu;
pid=fork();
if(pid==0)
cout<<"Ben Çocuk..."<<getpid()<<endl;
else
{
cout<<"Ben anne proses , çocuğumu beklicem tmm mı"<<endl;
pid_w=waitpid(pid,&statu,0);
//Çocuğun sonlanmasını bekliyor
cout<<"Sonlanan..."<<pid_w<<endl;  //Sonlanan prosesin PID si yazdırılıyor

}

}

PROCESSLER İLE THREADLER ARASINDAKİ FARKLAR

1-Threadler, onu oluşturan işlemin adres alanını paylaşır; processler kendi adres alanlarına sahiptir.


2-Threadler, işlemin veri bölümüne doğrudan erişime sahiptir; Processler üst işlemin veri bölümünün kendi kopyaları vardır.


3-Threadler, süreçlerinin diğer konuları ile doğrudan iletişim kurabilir; Processler kardeş süreçlerle 
iletişim kurmak için süreçlerarası iletişim kullanmalıdır.


4-Threadler neredeyse hiç yük taşımıyor; Processler hatırı sayılır bir yükü var.


5-Threadler kolayca oluşturulur; Yeni süreçler üst Processin çoğaltılmasını gerektirir.


6-Threadler, aynı işlemdeki iş parçacıkları üzerinde önemli denetime sahip olabilir; Processler yalnızca çocuk süreçleri üzerinde kontrol sahibi olabilirler.


7-Ana threadler değişiklikler (iptal, öncelik değişikliği, vb.) Işlemin diğer threadlerinin davranışını etkileyebilir; Üst processteki değişiklikler alt processleri etkilemez.

http://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread Sitesinden çevrilmiştir

Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...