NeuroLook
Ir al canal en Telegram
1 669
Suscriptores
Sin datos24 horas
-37 días
-1130 días
Archivo de publicaciones
1 669
🌐 Даббл: Где интернет-культура встречается с технологиями 🚀
Погрузись в мир будущего вместе с нами!
В Даббл ты найдешь:
* 🔥 Актуальные мемы и тренды интернета
* 🤖 Обзоры инновационных гаджетов и приложений
* 🧠 Новости из мира искусственного интеллекта
* 🔭 Взгляд на будущее технологий
Даббл - твой проводник в мир цифровых инноваций и онлайн-культуры.
➡️ @DoubleSource
1 669
🧠 Digitalium: Погружение в мир будущего
#1 источник информации о передовых технологиях!
С нами ты будешь в курсе:
* 🚀 Прорывов в области ИИ и машинного обучения
* 🤖 Новейших разработок в сфере информационных технологий
* 🧬 Революционных открытий в области науки и техники
* 🔭 Трендов, которые формируют будущее
Digitalium - твой путеводитель по миру инноваций.
➡️ @DigitaliumIT
1 669
## 🍏 Ябломания | Apple 🍏
Твой главный источник информации о мире Apple!
Здесь ты найдешь:
* 📰 Горячие новости: будь в курсе всех событий и анонсов компании Apple.
* 🔬 Подробные обзоры: узнай все о новых iPhone, iPad, Mac и других устройствах.
* 🤫 Интересные фишки и секреты: открой для себя скрытые возможности техники Apple.
* 👥 Активное сообщество: общайся с другими фанатами Apple и делись своим опытом.
Подписывайся и погрузись в мир Apple вместе с нами!
➡️ @YablomaniyaNews
#реклама
1 669
## Открой дверь в мир технологий с Технобутик! 🗝️
Технобутик - твой проводник в бескрайнюю вселенную:
* 💫 Новейших технологий: будь в курсе последних разработок и инноваций.
* 🌐 Интернет-культуры: погрузись в мир мемов, трендов и онлайн-сообществ.
* 🧠 Умных нейросетей: узнай, как искусственный интеллект меняет нашу жизнь.
* 🚀 И многого другого!
Подписывайся и расширяй свои горизонты вместе с нами!
➡️ @Technobutik
1 669
🚀 Хочешь прокачать свой диджитал скилл?
Тогда тебе к нам!
The Фичер - твой гид в мире технологий и соцсетей.
Здесь ты найдешь:
* 🔥 Лайфхаки для смартфона и ПК
* 🤫 Скрытые фишки популярных приложений
* 🧰 Инструменты для продуктивности
* 🔐 Секреты кибербезопасности
* 📈 Советы по продвижению в соцсетях
Подписывайся и прокачивайся вместе с нами!
➡️ @feachermedia
#реклама
1 669
🖥 Факт дня — семафоры в C#
Семафоры позволяют ограничить количество потоков, которые имеют доступ к определенным ресурсам. В .NET семафоры представлены классом
Semaphore.
Для создания семафора применяется один из конструкторов класса Semaphore:
🟡Semaphore (int initialCount, int maximumCount)
параметр initialCount задает начальное количество потоков, а maximumCount — максимальное количество потоков, которые имеют доступ к общим ресурсам: initialCount — изначальное доступное количество свободных мест, maximumCount — вместимость.
🟡Semaphore (int initialCount, int maximumCount, string? name) в дополнение задает имя семафора
🟡Semaphore (int initialCount, int maximumCount, string? name, out bool createdNew): последний параметр — createdNew при значении true указывает, что новый семафор был успешно создан. Если этот параметр равен false, то семафор с указанным именем уже существует
Для работы с потоками класс Semaphore имеет 2 основных метода:
— WaitOne() ожидает получения свободного места в семафоре
— Release() освобождает место в семафоре
В отличие от lock (Monitor) и Mutex, у Semaphore нет «владельца» — он не зависит от потока. Любой поток может вызвать Release на семафоре, тогда как с Mutex и блокировкой только поток, получивший блокировку, может ее освободить.
// запускаем пять потоков
for (int i = 1; i < 6; i++)
{
Reader reader = new Reader(i);
}
class Reader
{
// создаем семафор
static Semaphore sem = new Semaphore(3, 3);
Thread myThread;
int count = 3;// счетчик чтения
public Reader(int i)
{
myThread = new Thread(Read);
myThread.Name = $"Читатель {i}";
myThread.Start();
}
public void Read()
{
while (count > 0)
{
sem.WaitOne(); // ожидаем, когда освободиться место
Console.WriteLine($"{Thread.CurrentThread.Name} входит в библиотеку");
Console.WriteLine($"{Thread.CurrentThread.Name} читает");
Thread.Sleep(1000);
Console.WriteLine($"{Thread.CurrentThread.Name} покидает библиотеку");
sem.Release(); // освобождаем место
count--;
Thread.Sleep(1000);
}
}
}1 669
🚀 Готовься к переменам в мире IT с нашим практическим курсом по Domain Driven Design!
😰 Устал от запутанной инфраструктуры, вперемешку с бизнес логикой? Мы знаем, как это тяжело. Писать тесты становится неприятно и больно, много приходится мокать, тесты получаются огромными, хрупкими.. Но есть решение! Присоединяйся к нашему курсу, где мы разложим все по полочкам за 10 вебинаров, начиная с 13 мая.
🔝 Прими вызов и стань частью передовой волны технологического прогресса. Успей зарегистрироваться уже сейчас https://microarch.ru/courses/hexagonal-architecture?utm_source=posev&utm_medium=erid:2VtzqvmkXyj&utm_campaign=2
🎓 На нашем курсе ты изучишь:
✅ Основы Domain-Driven Design и его важность для разработчиков.
✅ Создание эффективных и масштабируемых сервисов с использованием DDD.
✅ Применение шаблонов проектирования и принципов DDD для оптимизации кода и повышения производительности.
💡 Зачем тебе этот курс?
🌟 Плюс, ты получишь:
— Новые подходы к разработке, в том числе и использование подходов ядра ...
1 669
🌟 Оставайтесь на острие технологий с каналом "WatcherTechno"! 🚀
Здесь вы найдете самые интересные и оперативные новости из мира высоких технологий, гаджетов и бизнеса.
👉 Подписывайтесь: @WatcherTechno
1 669
🔥 Погрузитесь в мир техно-новинок с каналом "THIL — Техно Импульс"! 🌐
От айтишного хайпа до киберпанка и всего, что связано с будущим технологий и виртуальной реальности — у нас есть всё. Присоединяйтесь к нам, чтобы оставаться в курсе самых свежих и захватывающих технологических трендов!
✨ Подписывайтесь и откройте для себя мир возможностей — @xTHILx
1 669
🚀 Присоединяйтесь к "IT Магистрат"!
В этом канале делятся увлекательными историями из мира IT и кибербезопасности. Здесь вы найдете все самое важное о защите данных и последних технологических новинках. Не пропустите уникальную возможность быть в курсе всех IT-событий!
👉 Подписывайтесь сейчас на @ITMagistrat и станьте частью этого сообщества!
1 669
🚀 TechGPT News: Технологии и ИИ без лишних слов!
🤖 Новости, тренды, практическое применение. Будь в курсе будущего уже сегодня.
➡️ Подписывайся: @TechGPTNews
1 669
🤖 Хотите быть в курсе последних новостей о технологиях и искусственном интеллекте?
Тогда подписывайтесь на первый верифицированный Telegram-канал об ИИ - GPTMain News! ✅
Здесь вы найдете:
* ⚡️ Горячие новости из мира технологий и AI.
* 🤖 Обзоры новейших разработок и продуктов.
* 🧠 Инсайты от экспертов и лидеров индустрии.
* 🔮 Прогнозы развития искусственного интеллекта.
* 🚀 И многое другое!
Будьте на шаг впереди с GPTMain News!
👉 @GPTMainNews
1 669
🌐 TechGPT News: твой гид в мире технологий и ИИ!
🚀 Хочешь быть в курсе самых свежих новостей из мира технологий, инноваций и ИИ? Интересуешься, как эти разработки применяются в реальной жизни?
🤖 Тогда присоединяйся к нашему Telegram-каналу "TechGPT News"!
Мы рассказываем о:
* 💡 Прорывных технологиях и стартапах, меняющих мир
* 🧠 Новейших разработках в области искусственного интеллекта
* 🛠️ Практическом применении ИИ в различных сферах жизни
* 🔭 Трендах и прогнозах развития технологического ландшафта
* 🎙️ Интервью с экспертами и лидерами индустрии
С нами ты:
* всегда будешь в курсе последних событий
* поймешь, как технологии влияют на твою жизнь
* найдешь вдохновение для новых идей
* расширишь свой кругозор
Подписывайся на TechGPT News и окунись в захватывающий мир технологий!
➡️ Ссылка на канал: @TechGPTNews
#TechGPT #Технологии #Инновации #ИИ #AI #Новости #Будущее
1 669
+2
🖥 Zenject, внедрение зависимостей, Unity C#
Очень понятное объяснение, что же такое Zenject, Dependency Injection и всё такое
Рекомендую)
Что внутри?
• 00:36 - Другие годные источники по зенджекту
• 02:20 - Что такое Dependency Injection?
• 03:39 - Проблема DI — большое количество сервисов
• 04:02 - Проблема DI — вложенные зависимости
• 04:56 - Проблема DI — разное время жизни сервисов
• 05:45 - Что делает Zenject?
• 06:35 - Binding в Zenject
• 07:54 - Installer-s в Zenject
• 09:16 - Context в Zenject
• 10:54 - Как это всё работает
• 11:54 - Дополнительные инструменты Zenject-а
• 13:04 - ITickable, IInitializable и IDisposable
📎 YouTube
🖥 GitHub
1 669
🚀 Хочешь быть в курсе последних трендов мира IT, технологий и нейросетей?
🧠 Тогда тебе к нам! DeepTech – твой проводник в мир инноваций и будущего.
Подписывайся на наш Telegram-канал и получай:
* 🔥 Горячие новости из мира IT и технологий
* 🤖 Обзоры последних достижений в области нейросетей и искусственного интеллекта
* 📈 Аналитику и прогнозы развития бизнеса в условиях технологической революции
* 🎙️ Интервью с экспертами и лидерами индустрии
* 💡 Инсайты и полезные материалы для профессионального роста
Присоединяйся к сообществу DeepTech и будь на шаг впереди!
➡️ Ссылка на канал: @DeepTechNET
#DeepTech #Нейросети #Технологии #IT #Бизнес #Инновации #Будущее
1 669
🖥 Многопоточное vs асинхронное программирование
▶️Вообще, есть несколько разных понятий:
• Конкурентное исполнение
• Параллельное исполнение
• Многопоточное исполнение
• Асинхронное исполнение
Каждый из этих терминов строго определен и имеет четкое значение.
🟡Конкурентность
Конкурентность — это наиболее общий термин, который говорит, что одновременно выполняется более одной задачи.
🟡Параллельное исполнение
Параллельное исполнение подразумевает наличие более 1 вычислительного устройства (например, процессора), которые будут одновременно выполнять несколько задач.
Параллельное исполнение — это строгое подмножество конкурентного исполнения. Это значит, что на компьютере с 1 процессором параллельное программирование - невозможно
🟡Многопоточность
Многопоточность — это один из способов реализации конкурентного исполнения путем выделения абстракции "рабочего потока" (worker thread).
Потоки "абстрагируют" от пользователя низкоуровневые детали и позволяют выполнять более чем одну работу "параллельно". Оп...
1 669
🖥 Ссылочные локальные переменные в C#
🟡Начиная с версии C# 7 в языке появилась возможность, позволяющая объявить локальную переменную, ссылающуюся на элемент массива или на поле в объекте:
int[] simpleArray = {0, 1, 2, 3, 4, 5, 6, 7, 8};
ref int simpleElementRef = ref simpleArray[3];
В этом примере simpleElementRef — ссылка на simpleArray[3]. Изменение simpleElementRef приводит к изменению элемента массива:
simpleElementRef *= 15; Console.WriteLine(simpleElementRef); // 15 Console.WriteLine(simpleArray[3]); // 15🟡В качестве цели ссылочной локальной переменной может быть указан элемент массива, поле, или обычная локальная переменная. Целью не может быть свойство. Ссылочные локальные переменные используются для специальных сценариев микро-оптимизации и как правило применяются в сочетании с возвращаемыми ссылочными значениями. 🟡Также ссылочные локальные переменные можно возвращать из методов. В результате получаем возвращаемое ссылочное значение:
static string X = "Старое значение"; static ref...
1 669
🖥 Факт дня — Task.Yield()
Повторение — мать учения и основа научного метода, так что приступим)
Task.Yield() возвращает специальное значение, предназначенное для передачи оператору await, и в отрыве от этого оператора не имеющее смысла.
Конструкция же await Task.Yield() делает довольно простую вещь — прерывает текущий метод и сразу же планирует его продолжение в текущем контексте синхронизации.
Используется же эта конструкция для разных целей.
🟡Во-первых, эта конструкция может быть использована для немедленного возврата управления вызывающему коду. Например, при вызове из обработчика события событие будет считаться обработанным:
protected override async void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
await Task.Yield();
// (какая-то логика)
}
🟡Во-вторых, эта конструкция используется для очистки синхронного контекста вызова. Например, так можно "закрыть" текущую транзакцию (ambient transaction):
using (var ts = new TransactionScope()) {
// ...
Foo();
// ...
ts.Complete();
}
async void Foo() {
// ... тут мы находимся в контексте транзакции
if (Transaction.Current != null) await Task.Yield();
// ... а тут его уже нет!
}
🟡В-третьих, эта конструкция может очистить стек вызовов. Это может быть полезным, если программа падает с переполнением стека при обработке кучи вложенных продолжений.
Например, рассмотрим упрощенную реализацию AsyncLock:
class AsyncLock
{
private Task unlockedTask = Task.CompletedTask;
public async Task<Action> Lock()
{
var tcs = new TaskCompletionSource<object>();
await Interlocked.Exchange(ref unlockedTask, tcs.Task);
return () => tcs.SetResult(null);
}
}
Здесь поступающие запросы на получение блокировки выстраиваются в неявную очередь на продолжениях. Казалось бы, что может пойти не так?
private static async Task Foo()
{
var _lock = new AsyncLock();
var unlock = await _lock.Lock();
for (var i = 0; i < 100000; i++) Bar(_lock);
unlock();
}
private static async void Bar(AsyncLock _lock)
{
var unlock = await _lock.Lock();
// do something sync
unlock();
}
Здесь продолжение метода Bar вызывается в тот момент, когда другой метод Bar выполняет вызов unlock(). Получается косвенная рекурсия между методом Bar и делегатом unlock, которая быстро сжирает стек и ведет к его переполнению.
Добавление же вызова Task.Yield() перенесет исполнение в "чистый" фрейм стека, и ошибка исчезнет:
class AsyncLock
{
private Task unlockedTask = Task.CompletedTask;
public async Task<Action> Lock()
{
var tcs = new TaskCompletionSource<object>();
var prevTask = Interlocked.Exchange(ref unlockedTask, tcs.Task);
if (!prevTask.IsCompleted)
{
await prevTask;
await Task.Yield();
}
return () => tcs.SetResult(null);
}
}