✍️ Arman BabaeiArman Babaei
🤝 CTO at WorkgramCTO at Workgram
یک سوال چالشی که شاید در مصاحبه استخدامی ازتون پرسیده بشه.
ببینم تجربیات دیتابیس دوستان در چه حد هست.
سوال:
یک جدول به نام best_programmers داریم با چند میلیون ریکورد.
در این جدول قراره هر روز لیست برنامهنویسان برتر بروزرسانی بشه به صورت صعودی.
چالش: اگر برنامهنویسی از رتبه ۱۰۰۰ به رتبه ۱ منتقل بشه اونوقت شما مجبور هستید رنکینگ همهی برنامهنویسان رو تغییر بدید و با توجه به ریکوردهای زیاد این امر بهینه نیست.
یک راه حل بهینه پیشنهاد بدید که با کمترین هزینه رنکینگ برنامهنویسان بروزرسانی بشه.
➖➖➖➖➖➖➖➖
💚 Donate
🤍 @gopher_academy
❤️ @GolangEngineers
🤝 CTO at WorkgramCTO at Workgram
یک سوال چالشی که شاید در مصاحبه استخدامی ازتون پرسیده بشه.
ببینم تجربیات دیتابیس دوستان در چه حد هست.
سوال:
یک جدول به نام best_programmers داریم با چند میلیون ریکورد.
در این جدول قراره هر روز لیست برنامهنویسان برتر بروزرسانی بشه به صورت صعودی.
چالش: اگر برنامهنویسی از رتبه ۱۰۰۰ به رتبه ۱ منتقل بشه اونوقت شما مجبور هستید رنکینگ همهی برنامهنویسان رو تغییر بدید و با توجه به ریکوردهای زیاد این امر بهینه نیست.
یک راه حل بهینه پیشنهاد بدید که با کمترین هزینه رنکینگ برنامهنویسان بروزرسانی بشه.
➖➖➖➖➖➖➖➖
💚 Donate
🤍 @gopher_academy
❤️ @GolangEngineers
👍8 2❤1🍾1
system_design_1_fa.pdf
10.7 MB
✅ کتاب ترجمه شده سیستم دیزاین نرم افزار ۱ ( 1 INTERVIEW DESIGN SYSTEM )
نویسنده: Alex Xu
https://system-design.ir/
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
نویسنده: Alex Xu
https://system-design.ir/
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍10🍾4
شرکت OpenAI مدل هوش مصنوعی جدید خود بهنام GPT-4o را معرفی کرد. این مدل، یک شبکهی عصبی multimodal یا omni است. بهعبارتی میتواند پذیرای دادهی ورودی از نوع متن، صوت، تصویر و یا ویدئو باشد. خروجی مدل نیز میتواند از هر نوعی باشد.
این هوش مصنوعی، جایگزینی برای دستیارهای صوتی سنتی مثل Apple Siri یا Amazon Alexa یا Google Assistant است که به مدلهای بنیادین مانند LLM ها مجهز شدهست و میتواند تعامل واقعا هوشمندانهای شبیه به سامانهی سامانثا در فیلم Her ارائه دهد.
پیش از این، ChatGPT قابلیتی بهنام Voice Mode داشت که به کاربران اجازهی تعامل از طریق صوت بهجای نوشتار را میداد. اما در این حالت، ابتدا صدای کاربر به مدل OpenAI Whisper که یک مدل ASR است داده میشد و متن معادل آن صدا بهدست میآمد. سپس این متن به مدل GPT-4 که یک LLM است داده شده و پاسخ مورد نظر در قالب متنی دیگر بهدست میآمد. در نهایت، این پاسخ متنی به کمک یک مدل سادهی TTS به صوت تبدیل و به کاربر ارائه میشد.
این پایپلاین، اگرچه در نوع خود بینظیر بود اما طبیعتا latency قابل توجهی (حدود ۵/۴ ثانیه) داشت که هرگز نمیتوانست حس یک گپوگفت طبیعی را به کاربر منتقل کند. از طرفی کاربر باید منتظر پردازش کامل صحبت قبلی میماند و برخلاف یک گپوگفت طبیعی، نمیتوانست صحبت دستیار را قطع کند. به علاوه اطلاعات مهمی از صحبت کاربر (مانند تون صدا، احساس، نویز محیط و …) به مدل زبانی منتقل نمیشد و صدای خروجی نیز عاری از هرگونه ابراز احساسات، خنده، آواز و … بود.
اما مدل GPT-4o یک مدل end-to-end است یعنی از سه مدل مجزا تشکیل نشده و همهی انواع ورودیها از طریق یک شبکهی عصبی یکتا، پردازش میشوند. بنابراین این مدل بهصورت میانگین طی مدت ۳۲۰ میلیثانیه (مشابه سرعت پاسخگویی انسان) پاسخ کاربر را میدهد.
کیفیت عملکرد این مدل برروی benchmark های متداول برای نوشتار انگلیسی، کدزنی و استدلال، مشابه با مدل GPT-4 Turbo است اما برای تسکهای چندزبانی، پردازش صوت و همچنین بینایی، عملکرد بهتری دارد.
قابلیت پردازش متن و تصویر به کمک مدل GPT-4o از امروز به نسخهی رایگان ChatGPT اضافه شده اما قابلیت پردازش صوت از چندهفته دیگر برای کابران نسخهی Plus در دسترس خواهد بود. توسعهدهندهگان نیز از امروز میتوانند به قابلیتهای پردازش متن و تصویر از طریق API با نصف هزینهی GPT-4 Turbo دسترسی داشته باشند.
نکتهی انگیزشی برای اعضای کانال اینکه در بین سازندگان اصلی این مدل نام تعداد زیادی از هممیهنان عزیزمون به چشم میخوره. آقایان علی کمالی، امین توتونچیان، بهروز قربانی، فرزاد خراسانی، هادی سلمان، رضا زمانی و …
https://openai.com/index/hello-gpt-4o/
#SchoolOfAI
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
این هوش مصنوعی، جایگزینی برای دستیارهای صوتی سنتی مثل Apple Siri یا Amazon Alexa یا Google Assistant است که به مدلهای بنیادین مانند LLM ها مجهز شدهست و میتواند تعامل واقعا هوشمندانهای شبیه به سامانهی سامانثا در فیلم Her ارائه دهد.
پیش از این، ChatGPT قابلیتی بهنام Voice Mode داشت که به کاربران اجازهی تعامل از طریق صوت بهجای نوشتار را میداد. اما در این حالت، ابتدا صدای کاربر به مدل OpenAI Whisper که یک مدل ASR است داده میشد و متن معادل آن صدا بهدست میآمد. سپس این متن به مدل GPT-4 که یک LLM است داده شده و پاسخ مورد نظر در قالب متنی دیگر بهدست میآمد. در نهایت، این پاسخ متنی به کمک یک مدل سادهی TTS به صوت تبدیل و به کاربر ارائه میشد.
این پایپلاین، اگرچه در نوع خود بینظیر بود اما طبیعتا latency قابل توجهی (حدود ۵/۴ ثانیه) داشت که هرگز نمیتوانست حس یک گپوگفت طبیعی را به کاربر منتقل کند. از طرفی کاربر باید منتظر پردازش کامل صحبت قبلی میماند و برخلاف یک گپوگفت طبیعی، نمیتوانست صحبت دستیار را قطع کند. به علاوه اطلاعات مهمی از صحبت کاربر (مانند تون صدا، احساس، نویز محیط و …) به مدل زبانی منتقل نمیشد و صدای خروجی نیز عاری از هرگونه ابراز احساسات، خنده، آواز و … بود.
اما مدل GPT-4o یک مدل end-to-end است یعنی از سه مدل مجزا تشکیل نشده و همهی انواع ورودیها از طریق یک شبکهی عصبی یکتا، پردازش میشوند. بنابراین این مدل بهصورت میانگین طی مدت ۳۲۰ میلیثانیه (مشابه سرعت پاسخگویی انسان) پاسخ کاربر را میدهد.
کیفیت عملکرد این مدل برروی benchmark های متداول برای نوشتار انگلیسی، کدزنی و استدلال، مشابه با مدل GPT-4 Turbo است اما برای تسکهای چندزبانی، پردازش صوت و همچنین بینایی، عملکرد بهتری دارد.
قابلیت پردازش متن و تصویر به کمک مدل GPT-4o از امروز به نسخهی رایگان ChatGPT اضافه شده اما قابلیت پردازش صوت از چندهفته دیگر برای کابران نسخهی Plus در دسترس خواهد بود. توسعهدهندهگان نیز از امروز میتوانند به قابلیتهای پردازش متن و تصویر از طریق API با نصف هزینهی GPT-4 Turbo دسترسی داشته باشند.
نکتهی انگیزشی برای اعضای کانال اینکه در بین سازندگان اصلی این مدل نام تعداد زیادی از هممیهنان عزیزمون به چشم میخوره. آقایان علی کمالی، امین توتونچیان، بهروز قربانی، فرزاد خراسانی، هادی سلمان، رضا زمانی و …
https://openai.com/index/hello-gpt-4o/
#SchoolOfAI
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
Openai
Hello GPT-4o
We’re announcing GPT-4 Omni, our new flagship model which can reason across audio, vision, and text in real time.
🍾10❤4👍2
package main
import "fmt"
func main() {
var values = []string{"1", "2", "3", "4", "5"}
for _, value := range values[1:] {
fmt.Println(value)
}
}
ایجاد و استفاده از حلقه for range در زبان گولنگ و همچنین محدود کردن slice مورد نظر آن به کمک اندیس ها
#go_idiom
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
🍾5👍3 1
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei
🍾اختصاص Thread به یک Core بخصوص !
بعضی اوقات نیازه تا Thread های مختلف سیستم عاملی (OS Thread) رو به Core های خاصی اختصاص بدیم تا مطمن شیم سیستم عامل اونا رو توسط همون Core ای که مشخص کردیم پردازش میکنه. دلیل این کار اینه که میخوایم مطمن بشیم Context Switch بین ترد های برنامه رو به حداقل رسوندیم و ممکنه حتی تنظیماتی روی سیستم عامل انجام دادیم که Signal ها و Interrupt های نرم افزاری و سخت افزاری رو برای یک Core بسته باشیم و بارشون رو روی بقیه Core ها فرستادیم تا اون Core مورد نظر ما Block نشه سر این اتفاقا. اینجوری ۱۰۰ درصد پردازش اون Core اختصاص داده میشه به برنامه مون.
برای این کار میتونیم از syscall سیستم عاملی sched_setaffinity استفاده کنیم که جزو libc هست و روی سیستم عامل های UNIX ای جواب میده فقط ( احتمال خیلی زیاد مشابه این syscall برای Windows هم وجود داشته باشه)
برای توضیحات تکمیلی و روش استفاده میتونید به لینک زیر برید:
https://lnkd.in/dSuhgQSq
کامند taskset کار مشابه ای انجام میده و شما میتونید با مشخص کردن Process ID و Core مورد نظر برنامه تون رو بفرستید به اون Core.
احتمالا داخل اکثر زبان های سیستمی Library مشابه ای باشه که نیاز نباشه خودتون درگیر syscall زدن بشید. پکیج core_affinity_rs برای Rust همین کارو میکنه و خیلی راحت موقع ترد ساختن میتونید ازش استفاده کنید. اگه از ران تایم tokio هم استفاده میکنید tokio یه handler داره برای ترد هایی که ایجاد میکنه که میتونید از این پکیج اونجا استفاده کنید.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
🍾اختصاص Thread به یک Core بخصوص !
بعضی اوقات نیازه تا Thread های مختلف سیستم عاملی (OS Thread) رو به Core های خاصی اختصاص بدیم تا مطمن شیم سیستم عامل اونا رو توسط همون Core ای که مشخص کردیم پردازش میکنه. دلیل این کار اینه که میخوایم مطمن بشیم Context Switch بین ترد های برنامه رو به حداقل رسوندیم و ممکنه حتی تنظیماتی روی سیستم عامل انجام دادیم که Signal ها و Interrupt های نرم افزاری و سخت افزاری رو برای یک Core بسته باشیم و بارشون رو روی بقیه Core ها فرستادیم تا اون Core مورد نظر ما Block نشه سر این اتفاقا. اینجوری ۱۰۰ درصد پردازش اون Core اختصاص داده میشه به برنامه مون.
برای این کار میتونیم از syscall سیستم عاملی sched_setaffinity استفاده کنیم که جزو libc هست و روی سیستم عامل های UNIX ای جواب میده فقط ( احتمال خیلی زیاد مشابه این syscall برای Windows هم وجود داشته باشه)
برای توضیحات تکمیلی و روش استفاده میتونید به لینک زیر برید:
https://lnkd.in/dSuhgQSq
کامند taskset کار مشابه ای انجام میده و شما میتونید با مشخص کردن Process ID و Core مورد نظر برنامه تون رو بفرستید به اون Core.
احتمالا داخل اکثر زبان های سیستمی Library مشابه ای باشه که نیاز نباشه خودتون درگیر syscall زدن بشید. پکیج core_affinity_rs برای Rust همین کارو میکنه و خیلی راحت موقع ترد ساختن میتونید ازش استفاده کنید. اگه از ران تایم tokio هم استفاده میکنید tokio یه handler داره برای ترد هایی که ایجاد میکنه که میتونید از این پکیج اونجا استفاده کنید.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍4 4🍾1
💜 Feedback-Directed Optimization (FDO)
💸 یک تکنیک بهینهسازی است که از دادههای اجرایی برنامه برای بهبود کارایی آن استفاده میکند. این دادهها معمولاً شامل اطلاعاتی درباره hot paths و الگوهای استفاده در کد میباشد.
💜Profile-Guided Optimization (PGO)
💸 نوع خاصی از FDO است که بهینهسازی را بر اساس دادههای پروفایل جمعآوری شده از اجرای برنامه هدایت میکند.
🥂مراحل
↙️جمعآوری دادههای پروفایلینگ: برنامه با بار کاری اجرا میشود تا دادههای اجرایی جمعآوری شود.
↙️تحلیل دادهها: دادههای جمعآوری شده تحلیل میشوند تا الگوهای اجرایی و hot paths شناسایی شوند.
↙️بهینهسازی: کامپایلر از این دادهها برای بهینهسازی کد استفاده میکند، معمولاً تمرکز بر بهبود عملکرد hot paths است.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
💸 یک تکنیک بهینهسازی است که از دادههای اجرایی برنامه برای بهبود کارایی آن استفاده میکند. این دادهها معمولاً شامل اطلاعاتی درباره hot paths و الگوهای استفاده در کد میباشد.
💜Profile-Guided Optimization (PGO)
💸 نوع خاصی از FDO است که بهینهسازی را بر اساس دادههای پروفایل جمعآوری شده از اجرای برنامه هدایت میکند.
🥂مراحل
↙️جمعآوری دادههای پروفایلینگ: برنامه با بار کاری اجرا میشود تا دادههای اجرایی جمعآوری شود.
↙️تحلیل دادهها: دادههای جمعآوری شده تحلیل میشوند تا الگوهای اجرایی و hot paths شناسایی شوند.
↙️بهینهسازی: کامپایلر از این دادهها برای بهینهسازی کد استفاده میکند، معمولاً تمرکز بر بهبود عملکرد hot paths است.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍4❤1
🔴گولنگ و بهینهسازی
در گولنگ، بهینهسازیها به طور مستقیم از طریق تکنیکهای FDO یا PGO اشاره نمیشود، اما کامپایلر و زمان اجرای گولنگ شامل بهینهسازیهای مختلفی هستند که میتوانند از دادههای پروفایلینگ بهرهمند شوند.
🟢بهینهسازیهای کلیدی در گولنگ:
اInlining: کامپایلر گولنگ میتواند توابع کوچک را در جای خود قرار دهد تا هزینه فراخوانی تابع کاهش یابد.
اEscape Analysis: تعیین میکند که آیا متغیرها میتوانند در پشته (stack) به جای هیپ (heap) تخصیص داده شوند، که هزینههای جمعآوری زباله (garbage collection) را کاهش میدهد.
اSSA (Static Single Assignment): کامپایلر گولنگ از فرم SSA برای ایجاد فرصتهای بهتر بهینهسازی استفاده میکند.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
در گولنگ، بهینهسازیها به طور مستقیم از طریق تکنیکهای FDO یا PGO اشاره نمیشود، اما کامپایلر و زمان اجرای گولنگ شامل بهینهسازیهای مختلفی هستند که میتوانند از دادههای پروفایلینگ بهرهمند شوند.
🟢بهینهسازیهای کلیدی در گولنگ:
اInlining: کامپایلر گولنگ میتواند توابع کوچک را در جای خود قرار دهد تا هزینه فراخوانی تابع کاهش یابد.
اEscape Analysis: تعیین میکند که آیا متغیرها میتوانند در پشته (stack) به جای هیپ (heap) تخصیص داده شوند، که هزینههای جمعآوری زباله (garbage collection) را کاهش میدهد.
اSSA (Static Single Assignment): کامپایلر گولنگ از فرم SSA برای ایجاد فرصتهای بهتر بهینهسازی استفاده میکند.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍7❤6
❇️استفاده عملی در گولنگ
هرچند گولنگ به طور صریح از اصطلاحات FDO یا PGO استفاده نمیکند، شما میتوانید از ابزارهای پروفایلینگ و تحلیل عملکرد برای بهینهسازی برنامههای گولنگ خود استفاده کنید.
💋مراحل برای بهینهسازی عملکرد در گولنگ:
😊پروفایلینگ: از ابزارهای داخلی گولنگ مانند pprof برای جمعآوری دادههای پروفایلینگ استفاده کنید.
🤔تحلیل: دادههای پروفایلینگ را تحلیل کنید تا گلوگاهها (bottlenecks)، مسیرهای داغ و مناطق قابل بهبود شناسایی شوند.
🤯بهینهسازی: کد خود را بر اساس بینشهای به دست آمده از پروفایلینگ بازنگری و بهینهسازی کنید.
🥱نمونهای از پروفایلینگ و بهینهسازی در گولنگ
🫡پروفایلینگ با pprof:
🤬تحلیل پروفایل:
از go tool pprof برای تحلیل دادههای پروفایل جمعآوری شده و شناسایی نقاط داغ استفاده کنید.
😴بهینهسازی کد:
بر اساس دادههای پروفایلینگ، کد خود را بازبینی کرده و بهینهسازی کنید.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
هرچند گولنگ به طور صریح از اصطلاحات FDO یا PGO استفاده نمیکند، شما میتوانید از ابزارهای پروفایلینگ و تحلیل عملکرد برای بهینهسازی برنامههای گولنگ خود استفاده کنید.
💋مراحل برای بهینهسازی عملکرد در گولنگ:
😊پروفایلینگ: از ابزارهای داخلی گولنگ مانند pprof برای جمعآوری دادههای پروفایلینگ استفاده کنید.
🤔تحلیل: دادههای پروفایلینگ را تحلیل کنید تا گلوگاهها (bottlenecks)، مسیرهای داغ و مناطق قابل بهبود شناسایی شوند.
🤯بهینهسازی: کد خود را بر اساس بینشهای به دست آمده از پروفایلینگ بازنگری و بهینهسازی کنید.
🥱نمونهای از پروفایلینگ و بهینهسازی در گولنگ
🫡پروفایلینگ با pprof:
package main
import (
"log"
"net/http"
_ "net/http/pprof"
)
func main() {
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
// your code
}
😜اجرای پروفایلر:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
🤬تحلیل پروفایل:
از go tool pprof برای تحلیل دادههای پروفایل جمعآوری شده و شناسایی نقاط داغ استفاده کنید.
😴بهینهسازی کد:
بر اساس دادههای پروفایلینگ، کد خود را بازبینی کرده و بهینهسازی کنید.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍8❤3
💜Escape Analysis
یکی از تکنیکهای مهم در بهینهسازی حافظه در زبانهای برنامهنویسی است. با استفاده از این تحلیل، کامپایلر میتواند تصمیم بگیرد که کدام متغیرها باید در stack و کدامها در heap ذخیره شوند، که این امر به بهینهسازی مصرف حافظه و عملکرد برنامه کمک میکند.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
یکی از تکنیکهای مهم در بهینهسازی حافظه در زبانهای برنامهنویسی است. با استفاده از این تحلیل، کامپایلر میتواند تصمیم بگیرد که کدام متغیرها باید در stack و کدامها در heap ذخیره شوند، که این امر به بهینهسازی مصرف حافظه و عملکرد برنامه کمک میکند.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍5 3
مایکروسافت در وبسایت رسمی خود ربات دستیار هوش مصنوعی Copilot که بر پایه ChatGPT است را در پلتفرم تلگرام و حالت beta در دسترس عموم قرار داده است و برای تایید باید از شماره غیر ایران استفاده کنید.
مایکروسافت در حالت کنونی با ۳۰ پرسش در روز از طریق ربات @CopilotOfficialBot در دسترس قرار داده است.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3 3
برنامهی git سیستمهاتون رو اپدیت کنید دوستان. چندتا آسیبپذیری داشته اخیرا.
من در مورد CVE-2024-32002 یه مقدار میدونم که موقع clone یه ریپو که recursive هست مشکل ایجاد میکنه. البته شایان ذکره که فقط رو سیستمهایی که میسرهاشون case insensetive هست (بله ویندوز) خطرناکه ولی به هر حال شما آپدیت کنید.
اگر هم امکان آپدیت نیست براتون میتونید symlinkها رو غیرفعال کنید چون این آسیبپذیری از symlink ها استفاده میکنه.
git config --global core.symlinks false
توضیحات بیشتر:
https://www.helpnetsecurity.com/2024/05/16/git-cve-2024-32002/
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
من در مورد CVE-2024-32002 یه مقدار میدونم که موقع clone یه ریپو که recursive هست مشکل ایجاد میکنه. البته شایان ذکره که فقط رو سیستمهایی که میسرهاشون case insensetive هست (بله ویندوز) خطرناکه ولی به هر حال شما آپدیت کنید.
اگر هم امکان آپدیت نیست براتون میتونید symlinkها رو غیرفعال کنید چون این آسیبپذیری از symlink ها استفاده میکنه.
git config --global core.symlinks false
توضیحات بیشتر:
https://www.helpnetsecurity.com/2024/05/16/git-cve-2024-32002/
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
Help Net Security
Critical Git vulnerability allows RCE when cloning repositories with submodules (CVE-2024-32002)
New versions of Git are out, with fixes for CVE-2024-32002, which can be used to remotely execute code during a "clone" operation.
👍10
✍️Rouzbeh SabzeheiRouzbeh Sabzehei
🍾شانس Kill شدن Process تون رو کم کنید !
در بعضی مواقع به دلیل محدود بودن مقدار حافظه فیزیکی , سیستم عامل جوابگوی مقدار حافظه ای که Process های مختلف از اون درخواست میکنن نیست. تو چنین شرایطی سیستم عامل مکانیزمی به اسم OOM (Out of Memory Killer) داره که بر اساس یک سری فاکتور ها میتونه یک یا چند Process باز رو Kill کنه و مقداری حافظه آزاد بشه !
سیستم هایی که footprint زیادی روی حافظه دارن شانس Kill شدنشون توسط سیستم عامل زیاد میشه. اگه خودمون همچین سیستمی رو طراحی کردیم یا از نرم افزار های دیگه ای استفاده میکنیم که footprint زیادی دارن مثل redis و دلمون نمیخواد همچین اتفاقی براشون بیفته میتونیم از روش زیر استفاده کنیم تا شانس Kill شدنشون رو خیلی کمتر کنیم
لینوکس به هر Process یک امتیاز به اسم oom_score اختصاص میده که عددی هست بین -1000 تا 1000 که هر چی این عدد کمتر باشه شانس Kill شدن اون Process کمتره. شما میتونید با کامند زیر مقدار oom_score برنامه موردنظرتون رو ببینید
برای عوض کردن این مقدار میتونید از دستور زیر استفاده کنید , باید توجه کنید که این یه فایل عادی نیست و نمیتونید با ادیتور هایی مثل vim یا nano بازش کنید و عوضش کنید
اگه با این روش مشکل داشتید میتونید از کامند choom هم استفاده کنید
البته این مقدار تو restart شدن اون Process تغییر میکنه و میتونید یه Automation براش بنویسید که موقع Start شدن اون برنامه مقدار دلخواه oom_score شما براش ست بشه
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
🍾شانس Kill شدن Process تون رو کم کنید !
در بعضی مواقع به دلیل محدود بودن مقدار حافظه فیزیکی , سیستم عامل جوابگوی مقدار حافظه ای که Process های مختلف از اون درخواست میکنن نیست. تو چنین شرایطی سیستم عامل مکانیزمی به اسم OOM (Out of Memory Killer) داره که بر اساس یک سری فاکتور ها میتونه یک یا چند Process باز رو Kill کنه و مقداری حافظه آزاد بشه !
سیستم هایی که footprint زیادی روی حافظه دارن شانس Kill شدنشون توسط سیستم عامل زیاد میشه. اگه خودمون همچین سیستمی رو طراحی کردیم یا از نرم افزار های دیگه ای استفاده میکنیم که footprint زیادی دارن مثل redis و دلمون نمیخواد همچین اتفاقی براشون بیفته میتونیم از روش زیر استفاده کنیم تا شانس Kill شدنشون رو خیلی کمتر کنیم
لینوکس به هر Process یک امتیاز به اسم oom_score اختصاص میده که عددی هست بین -1000 تا 1000 که هر چی این عدد کمتر باشه شانس Kill شدن اون Process کمتره. شما میتونید با کامند زیر مقدار oom_score برنامه موردنظرتون رو ببینید
cat /proc/{PID}/oom_score
برای عوض کردن این مقدار میتونید از دستور زیر استفاده کنید , باید توجه کنید که این یه فایل عادی نیست و نمیتونید با ادیتور هایی مثل vim یا nano بازش کنید و عوضش کنید
echo -100 > /proc/{PID}/oom_score_adj
اگه با این روش مشکل داشتید میتونید از کامند choom هم استفاده کنید
choom --adjust -100 --pid {PID}
البته این مقدار تو restart شدن اون Process تغییر میکنه و میتونید یه Automation براش بنویسید که موقع Start شدن اون برنامه مقدار دلخواه oom_score شما براش ست بشه
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍8❤2🔥1
داده های پروفایلینگ چیه؟🤔🤔
———————————-
دادههای پروفایلینگ به اطلاعات جمعآوری شده از اجرای یک برنامه در محیط واقعی یا آزمایشی اشاره دارد که برای تحلیل و بهینهسازی عملکرد برنامه استفاده میشود. این دادهها شامل جزئیات مختلفی درباره نحوه عملکرد کد و استفاده از منابع در طول اجرای برنامه هستند. پروفایلینگ به توسعهدهندگان کمک میکند تا گلوگاههای عملکردی، نقاط بحرانی و مشکلات مصرف منابع را شناسایی کنند و در نتیجه کد را بهینهسازی کنند.
——————————————-
انواع دادههای پروفایلینگ
cpu
mem profiling
gc profiling
blocking profiling
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
———————————-
دادههای پروفایلینگ به اطلاعات جمعآوری شده از اجرای یک برنامه در محیط واقعی یا آزمایشی اشاره دارد که برای تحلیل و بهینهسازی عملکرد برنامه استفاده میشود. این دادهها شامل جزئیات مختلفی درباره نحوه عملکرد کد و استفاده از منابع در طول اجرای برنامه هستند. پروفایلینگ به توسعهدهندگان کمک میکند تا گلوگاههای عملکردی، نقاط بحرانی و مشکلات مصرف منابع را شناسایی کنند و در نتیجه کد را بهینهسازی کنند.
——————————————-
انواع دادههای پروفایلینگ
cpu
mem profiling
gc profiling
blocking profiling
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
👍7🍾3
😴 اگر علاقه مند به سی پلاس پلاس هستید
🥱این رو از دست ندید
👾نکات مفیدی رو به اشتراک میذارن
🥸 https://abseil.io/tips/
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
🥱این رو از دست ندید
👾نکات مفیدی رو به اشتراک میذارن
🥸 https://abseil.io/tips/
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
🍾6❤2
🍻این hot paths چیه؟🔥
در واقع این "Hot paths" در زمینه بهینهسازی عملکرد نرمافزار، به بخشهایی از کد اشاره دارد که بیشترین بار پردازشی را دارند و بیشترین زمان CPU را مصرف میکنند. به عبارت دیگر، این بخشها نقاط داغ یا مسیرهای داغ (hot spots) برنامه هستند که در طول اجرای برنامه بیشتر تکرار میشوند و نیازمند توجه ویژهای برای بهینهسازی هستند.
برای شناسای و بهینه سازی هم از ابزار های پروفایلینگ استفاده می کنیم که چند پست گذاشتم در موردشون
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
در واقع این "Hot paths" در زمینه بهینهسازی عملکرد نرمافزار، به بخشهایی از کد اشاره دارد که بیشترین بار پردازشی را دارند و بیشترین زمان CPU را مصرف میکنند. به عبارت دیگر، این بخشها نقاط داغ یا مسیرهای داغ (hot spots) برنامه هستند که در طول اجرای برنامه بیشتر تکرار میشوند و نیازمند توجه ویژهای برای بهینهسازی هستند.
برای شناسای و بهینه سازی هم از ابزار های پروفایلینگ استفاده می کنیم که چند پست گذاشتم در موردشون
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
براساس شنیدهها ۳۰ نفر از کارمندان فلایتیو تعدیل و مدیر عامل و مدیران فنی، مارکتینگ، مالی و منابع انسانی استعفا دادهاند.
براساس این خبر علت استعفای مدیران فلایتیو دخالت سرمایهگذاران در مدیریت و ایجاد مشکلات نقدینگی بوده که برخی از کارکنان نیز در لینکدین از عدم پرداخت دستمزد خود خبر دادهاند.
به گفته کارکنان فلایتیو، این شرکت ساعت ۳ بامداد جمعه گذشته به کارکنان خود خبر از تعدیل نیرو را داده است.
#فلایتیو
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
براساس این خبر علت استعفای مدیران فلایتیو دخالت سرمایهگذاران در مدیریت و ایجاد مشکلات نقدینگی بوده که برخی از کارکنان نیز در لینکدین از عدم پرداخت دستمزد خود خبر دادهاند.
به گفته کارکنان فلایتیو، این شرکت ساعت ۳ بامداد جمعه گذشته به کارکنان خود خبر از تعدیل نیرو را داده است.
#فلایتیو
➖➖➖➖➖➖➖➖
🕊 @gopher_academy | @GolangEngineers
❤4 2