سلام به همه.
توی نوشته قبل دیدین که چطور میشه توی رزبری پای یه LED رو خاموش و روشن کرد.
توی این مقاله مقایسه ای بین زبان های pyhton ،java script (nodejs) و c برای برای اینکه ببینیم کدوم سرعت بیشتری رو کنترل ورودی و خروجی I/O داره انجام میدیم (به کمک زئوس).
اولین زبان که میخوایم بررسی کنیم پایتون هست. این که این زبان رو چه کسی ساخت و اصلا چیشد که پایتون درست شد قضیه مفصلی داره که توی این مقاله ما در مورد اون صحبت نمیکنیم.
زبان برنامه نویسی پایتون روی سیستم عامل raspbian به صورت پیش فرض نصبه. خب اولین قدم اینه که LED blink رو با زبان برنامه نویسی پایتون پیاده سازی کنیم. اینجا میتونید ببینید که چطور توی پایتون یه LED blink بنویسیم. تنها تفاوتی که داره اینه که ما نمیخوایم مدتی رو برای خاموش یا روشن بودن LED صبر کنیم. پس باید کد ما به این صورت باشه:
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(4,GPIO.OUT) while True: GPIO.output(4,True) GPIO.output(4,False)
خب همون طور که میبینید کدش خیلی کم و راحته. حالا بیاید این برنامه رو اجرا کنیم و ببینیم که با چه سرعتی دستور برای خاموش و روشن شدن LED میده.
من وقتی دفه اول کد رو اجرا کردم سرعت ۱مگاهرتز رو دیدم اما دفعه های بعد با سرعت تقریبا ۹۲۰ کیلوهرتر دستور برای خاموش و روشن شدن LED داد.
زبان برنامه نویسی JavaScript
درسته زبان برنامه نویسی جاوا اسکریپت! درسته که فقط توی مرورگر اجرا میشه اما چندسال پیش یه Platform (چهارچوب) به اسم Nodejs ارائه شد تا کد های جاوا اسکریپت رو خارج از مرورگر اجرا کنید. اگه میخواید بیشتر در مورد Nodejs بخونید میتونید به این لینک که داکیومنت Nodejs هست مراجعه کنید. Nodejs به صورت پیشفرض روی سیستم عامل Raspbian نصب نیست و شما باید اون رو نصب کنید روی سیستم عامل خودتون. (توجه کنید که من نسخه ۱۰ رو نصب کردم و هنگام اجرا بهم خطا داد که باید نسخه Nodejs رو به روز رسانی کنم. منم به نسخه ۱۴ آپدیت کردم).
var GPIO=require("onoff").Gpio; var LED=new GPIO(4,'out'); while(true){ LED.writeSync(1); LED.writeSync(0); } function blinkLED(){ if (LED.readSync()===0){ LED.writeSync(1); }else{ LED.writeSync(0); } } function endBlink (){ clearInterval(blink); LED.writeSync(0); LED.unexport(); }
اینجا ما از کتابخونه onoff استفاده کردیم که بر خلاف پایتون این کتابخونه به صورت پیشفرض نصب نیست و باید خودمون نصب کنیم. ما این کتابخونه رو با دستور npm install onoff نصب کردیم. همون طور که میشه توی کد ها دید این کتابخونه رو توی برنامه فراخانی کردیم و کد های خودمون رو نوشتیم.
نتیجه افتضاح بود. به خاطر اینکه با این کتابخونه به سرعت ۱۳۴ کیلوهرتز رسیدیم.
خیلی افتضاح بود. رفتیم یه جست و جوی کوچیک دیگه کردیم و به کتابخونه rpio رسیدیم. اون رو با دستور زیر نصب کردیم:
npm install rpio
بعدش هم این کد ها رو نوشتیم تو یه فایل با پسوند .js :
var rpio = require('rpio'); rpio.open(7, rpio.OUTPUT, rpio.LOW); for (var i = 0; i < 50000000; i++) { rpio.write(7, rpio.HIGH); rpio.write(7, rpio.LOW); }
خب همون طور که میبینید بعد از اینکه کتابخونه یا پکیج رو توی برنامه اوردیم و ازش استفاده کردیم. نتیجه خیلی بهتر بود. چون ما به سرعت ۱مگاهرتز رسیدیم.
زبان برنامه نویسی C
تا اینجا دوتا زبان اسکریپتی رو با هم مقایسه کردیم. من به زئوس گفتم بیا تا زبان برنامه نویسی C رو هم تست کنیم.
#include <wiringPi.h> #define RED 7 static void interruptHandler(const int signal) { exit(0); } int main(void) { signal(SIGINT, interruptHandler); if (-1 == wiringPiSetup()) { printf("Failed to setup Wiring Pi!\n"); return 1; } pinMode(RED, OUTPUT); while(1) { digitalWrite(RED, HIGH); digitalWrite(RED, LOW); } return 0; }
همون طور که میبینید زبان C کد هاش خیلی بیشتره نسبت به Python و Nodejs. اما وقتی اجرا کردیم نتیجه به صورت وحشتناکی خوب بود. دفعه اول که ران کردیم سرعت ۶ مگاهرتز رو دیدم. اما توی دفعه های بعد سرعت ۲ مگاهرتز رو دیدیم.
نتیجه گیری
زبان برنامه نویسی Python و JavaScript تقریبا با یه سرعت اجرا میشن. فقط با این تفاوت که زبان برنامه نویسی پایتون و کتابخونه های مرتبط به اون به صورت پیشفرض روی سیستم عامل رزبیان نصب هست و نیازی نداره که اون رو نصب کنیم اما Nodejs رو باید نصب کنیم (که چند ساعت از من وقت گرفت تا تونستم اون رو به نسخه ۱۴ به روز رسانی کنم).
اما زبان برنامه نویسی C. این برنامه به خاطر سطح پایین بودن کد های بیشتری نسبت به پایتون و Nodejs داره اما سرعت خیلی بیشتری نسبت بهشون داره. البته ما تا ۴۰۰ مگاهرتز رو هم توی زبان برنامه نویسی C دیدیم که این بدون واسط سیستم عامل انجام شد.
در این که زبان های برنامه نویسی فقط یه ابزار هستند شکی نیست. اما من به شخصه طرفدار زبان برنامه نویسی python بوده و هستم، همون طور که خودتون هم اطلاع دارین این زبان به شدت پر طرفداره و یکی دو هفته قبل پر طرفدار ترین زبان برنامه نویسی دنیا شده که اون هم به خاطر ساده بودن این زبان و فراوانی کتابخانه های اون هست.
منبع:سیسوگ