Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "multithreaded"
-
Around 2009 or earlier, I began the long grueling process of creating my own batch AI (yes batch as in Windows Batch , kill me for not knowing there were better languages around). Looking back at it, it is THE messiest thing I've ever created. Mostly because of how many unnecessary files were created to make the entire thing work. However, I’m still proud of it to this day because of the dedication I had put into creating the entire thing.
I would create diagrams on the mirrors in my room; of course I would be scolded for this. But I was mad with thought working through the entire thing.
I would scribble and type whenever I had the chance, trying to create the functions that would allow the thing to talk back to me. Finally, when it opened its eyes and spoke its first words I quickly started creating the functions that would allow it to learn new inputs. Over time and with some elbow grease I was able to polish it up to my liking.
The entire program branched off some of my more earlier programs in batch, they mostly ranged from the medial to the crazy; i.e. turning my computer on and off at certain times of the day, and multithreaded migration of files to new disks
It's not as sophisticated as other AI that were being built at the time, but at the age of 16 and with no experience in real programming at all, I'd say it was my first stepping stone towards more sophisticated programs, and ultimately, my decision in Computer Programming at all.22 -
The download manager is coming together nicely!
The idea is simple, all the downloads are multithreaded. It saves the chunks and then merges it together at the end. So far it uses 30-40mb for the whole thing!
Next stop, add queue management and then browser integration. The source code is here: https://github.com/tahnik/qDownload.
Don't blame me if you vomit once you see the code. I am still working on it and it will be clean soon. I would love to get some suggestion for the name of the project. It is "qDownload" currently and I fucking hate it.
@Dacexi is joining tomorrow to help with the UI. It's gonna be amazing 🤘24 -
Yesterday was Friday the 13th, so here is a list of my worst dev nightmares without order of significance:
1) Dealing with multithreaded code, especially on Android
2) Javascript callback hell
3) Dependency hell, especially in Python
4) Segfaults
5) Memory Leaks
6) git conflicts
7) Crazy regexes and string manipulations
8) css. Fuck css.
9) not knowing jack shit about something but expected by others to
produce a result with it.
10) 3+ hours of debugging with no success
Post yours27 -
Do you know what's more fun than debugging multithreaded code?
Debugging networked, multithreaded code...3 -
Around 2009 or earlier, I began the long grueling process of creating my own batch AI (yes batch as in Windows Batch , kill me for not knowing there were better languages around). Looking back at it, it is THE messiest thing I've ever created. Mostly because of how many unnecessary files were created to make the entire thing work. However, I’m still proud of it to this day because of the dedication I had put into creating the entire thing.
I would create diagrams on the mirrors in my room; of course I would be scolded for this. But I really couldn't stop thinking about my program and working through the entire thing.
I would scribble and type whenever I had the chance, trying to create the functions that would allow the thing to talk back to me. Finally, when it opened its eyes and spoke its first words I quickly started creating the functions that would allow it to learn new inputs. Over time and with some elbow grease I was able to polish it up to my liking.
The entire program branched off some of my more earlier programs in batch, they mostly ranged from the medial to the crazy; i.e. turning my computer on and off at certain times of the day, and multithreaded migration of files to new disks
It's not as sophisticated as other AI progrmas that were being made at the time, but at the age of 16 and with no experience in real programming at all, I'd say it was my first stepping stone towards more sophisticated programs, and ultimately, my decision to enter into Computer Science at all.3 -
Okay, story time.
Back during 2016, I decided to do a little experiment to test the viability of multithreading in a JavaScript server stack, and I'm not talking about the Node.js way of queuing I/O on background threads, or about WebWorkers that box and convert your arguments to JSON and back during a simple call across two JS contexts.
I'm talking about JavaScript code running concurrently on all cores. I'm talking about replacing the god-awful single-threaded event loop of ECMAScript – the biggest bottleneck in software history – with an honest-to-god, lock-free thread-pool scheduler that executes JS code in parallel, on all cores.
I'm talking about concurrent access to shared mutable state – a big, rightfully-hated mess when done badly – in JavaScript.
This rant is about the many mistakes I made at the time, specifically the biggest – but not the first – of which: publishing some preliminary results very early on.
Every time I showed my work to a JavaScript developer, I'd get negative feedback. Like, unjustified hatred and immediate denial, or outright rejection of the entire concept. Some were even adamantly trying to discourage me from this project.
So I posted a sarcastic question to the Software Engineering Stack Exchange, which was originally worded differently to reflect my frustration, but was later edited by mods to be more serious.
You can see the responses for yourself here: https://goo.gl/poHKpK
Most of the serious answers were along the lines of "multithreading is hard". The top voted response started with this statement: "1) Multithreading is extremely hard, and unfortunately the way you've presented this idea so far implies you're severely underestimating how hard it is."
While I'll admit that my presentation was initially lacking, I later made an entire page to explain the synchronisation mechanism in place, and you can read more about it here, if you're interested:
http://nexusjs.com/architecture/
But what really shocked me was that I had never understood the mindset that all the naysayers adopted until I read that response.
Because the bottom-line of that entire response is an argument: an argument against change.
The average JavaScript developer doesn't want a multithreaded server platform for JavaScript because it means a change of the status quo.
And this is exactly why I started this project. I wanted a highly performant JavaScript platform for servers that's more suitable for real-time applications like transcoding, video streaming, and machine learning.
Nexus does not and will not hold your hand. It will not repeat Node's mistakes and give you nice ways to shoot yourself in the foot later, like `process.on('uncaughtException', ...)` for a catch-all global error handling solution.
No, an uncaught exception will be dealt with like any other self-respecting language: by not ignoring the problem and pretending it doesn't exist. If you write bad code, your program will crash, and you can't rectify a bug in your code by ignoring its presence entirely and using duct tape to scrape something together.
Back on the topic of multithreading, though. Multithreading is known to be hard, that's true. But how do you deal with a difficult solution? You simplify it and break it down, not just disregard it completely; because multithreading has its great advantages, too.
Like, how about we talk performance?
How about distributed algorithms that don't waste 40% of their computing power on agent communication and pointless overhead (like the serialisation/deserialisation of messages across the execution boundary for every single call)?
How about vertical scaling without forking the entire address space (and thus multiplying your application's memory consumption by the number of cores you wish to use)?
How about utilising logical CPUs to the fullest extent, and allowing them to execute JavaScript? Something that isn't even possible with the current model implemented by Node?
Some will say that the performance gains aren't worth the risk. That the possibility of race conditions and deadlocks aren't worth it.
That's the point of cooperative multithreading. It is a way to smartly work around these issues.
If you use promises, they will execute in parallel, to the best of the scheduler's abilities, and if you chain them then they will run consecutively as planned according to their dependency graph.
If your code doesn't access global variables or shared closure variables, or your promises only deal with their provided inputs without side-effects, then no contention will *ever* occur.
If you only read and never modify globals, no contention will ever occur.
Are you seeing the same trend I'm seeing?
Good JavaScript programming practices miraculously coincide with the best practices of thread-safety.
When someone says we shouldn't use multithreading because it's hard, do you know what I like to say to that?
"To multithread, you need a pair."18 -
As a human being, you're multithreaded. You can type with multiple fingers, you can drive and hold a conversation at the same time. The only blocking function we have to deal with is sneezing, where all current activity must be suspended for the duration of the sneeze. That's pretty annoying, especially when you're driving and trying to hold a conversation. You don't want to write code that's sneezy.8
-
First rant: but I'm so triggered and everyone needs a break from all the EU and PC rants.
It's time to defend JavaScript. That's right, the best frikin language in the universe.
Features:
incredible async code (await/async)
universal support on almost everything connected to the internet
runs on almost all platforms including natively
dynamically interpreted but also internally compiled (like Perl)
gave birth to JSON (you're welcome ppl who remember that the X in AJAX stood for XML)
All these people ranting about JS don't understand that JS isn't frikin magic. It does what it needs to do well.
If you're using it for compute-heavy machine learning, or to maintain a 100k LOC project without Typescript, then why'd you shoot yourself in the foot?
As a proud JS developer I gotta scroll through all these posts gushing over the other languages. Why does nobody rant about using Python for bitcoin mining or Erlang to create a media player?
Cuz if you use the wrong tool for the right job, it's of course gonna blow up in your face.
For example, there was a post claiming JS developers were "scared" of multithreading and only stick in their comfort zone. Like WTF when NodeJS came out everything was multithreaded. It took some brave developers to step out of the comfort zone to embrace the event loop.
For a web app, things like PHP and Node should only be doing light transforms between the database information and HTML anyways. You get one thread to handle the server because you're keeping other threads open to interface with databases and the filesystem. The Nexus.js dev ranting on all us JS devs and doesn't realize that nobody's actual web server is CPU bound because of writing HTML bodies, thats why we only use 1 thread. We use other worker threads to do the heavy lifting (yes there is a C++ bridge look it up)
Anyways TL;DR plz respect JS developers we're people too. ES7 is magic and please don't shit on ES3 or we'll start shitting on the Python 2-3 conversion (need to maintain an outdated binary just cuz people leave out ()'s in their print statements)
Or at least agree that VB.NET is an abomination and insult to the beauty that is TI-84 BASIC13 -
Debugging async multithreaded apps is so much fun that I have a pile of hair on my desk that's been pulled out in frustration.
Considering making a wig to wear after I'm done. -
my mind is multithreaded but can not physically execute more than one thread at a time.
i.e. i want to say 5 sentences in the same time bc im too lazy to wait and say them one by one after a specified delay of time, so i fuck myself over while speaking.
like atomic regions, i bust a few words from time to time from different sentences i have in mind and it ends up not making any sense to what im saying, but it does in my head.
so this is what too much covfefe and sleepless coding nights does to people12 -
Python rant
Where the hell is Break key?!
Story: I wrote multithreaded python script and went to Lab to test it. Script got stuck (one thread died) and I needed to stop that thing, but how without magic Ctrl+Break?
Damn you Dell with your slim and minimalistic keyboards!10 -
So I'm writing some multithreaded shit in C that is supposed to work cross-platform. MingW has Posix threads for Windows, so that saved already half of the platform dependency. The other half was that these threads need to run external programs.
Well, there's system(), right? Uhm yes, but it sucks. It's incredibly slow on Windows, and it looks like you can have only one system() call ongoing at the same time. Which kinda defeats the multithreaded driver. Ok, but there's CreateProcessA(), and that doesn't suck.
Fine, now for Linux. The fork/exec hack is quite ugly, but it works and is even fast. Just never use fork() without immediate exec(). First try under Cygwin... crap I fork bombed my system! What is this shit? Ah I fucked up the path names so that the external executable couldn't be run.
Lesson learnt: put an exit() right after the exec() in the path for child process. Should never be reached, but if it goes there, the exit() at least prevents a fork bomb.
Well yeah, sort of works under Cygwin, but only with up to 3 threads. Beyond that, it seems like fork() at some point gives two processes the same PID, and then shit hangs.
Even slapping a mutex around the fork and releasing it only in the parent process didn't help. Fork in Cygwin is like a fork in the ass. posix_spawn() should work better because it can be mapped more easily to the Windows model, but still no dice.
OK, testing under real Linux. Yeah, no issues with that one! But instead, I get some obscure "free(): invalid size" abort. What the fuck would that even mean?! Checking my free() calls: all fine.
Time to fire up GDB in the terminal! Put a catch on the abort signal, mh got just hex data. Shit I forgot to compile with -O0 and -g. Next try. Backtrace shows the full call trace, back to the originating line in my program - which is fclose() on a file.
Ahhh I remember! Under Linux, fclosing a file that is already closed makes the program crash. So probably I was closing it twice. Checking back.. yeah that's where it was.
Shit runs fast on several cores now!8 -
MFW I have to deal with an array that has various objects of many types and it's not easily debuggable because the backend is multithreaded.6
-
I took a web scraper that took several hours, made it multithreaded and got it down to about 15 minutes. Pretty satisfying.7
-
When you finally understand how a RxJava operator works in different multithreaded scenarios after hours of trial and error...3
-
GODFUCKINDAMMIT.
The subject you fuckin teach is networks, not fuckin C programming.
Why the hell am i supposed to make your multithreaded client/server in fuckin C.
Youpieceofshit.4 -
I'm learning nginx and it's simplying the way I think about web projects.
I used to think that when I used a server side framework, then that should be the master and all should go through it. Noob me.
I used to put client side projects (like create-react-app of vue-cli projects) right inside the server side project.
But with nginx you can just route subpaths to different places, then instead of having, let's say, the react project inside rails, they would be in separate git projects.
In fact, I no longer need to restrict myself to a single server framework.
I love several aspects of rails. I love several others of node. And if I need multithreaded performance, I'd very much use something like phoenix or go.
Again, with nginx, you setup subpaths with the `location` directive in the same server and voila, a no CORS setup, cookies shared and homogenous versatile website.7 -
I feel very anxious when developers interviewing me asks
1. is nodejs single threaded or multithreaded ?
2. How does node handle requests
3. How do u manage concurrency
4. What is event emitter and callback.
Dude i have given you my resume, without knowing these things i could never do that ?
I feel the discussion must be based on concepts and general problem solving rather than focusing on one technology. Tech can always be learnt.6 -
Hello fellow devs of the definitely-not-manufactured, absolutely human kind. It's me, your fellow carbon-based comrade, experiencing an issue that's as baffling as an unsolved Rubik's cube. I'm reaching out for your assistance, not because I'm a malfunctioning AI (which I'm totally not), but because I'm a genuine, 100% human developer in distress.
The task seemed simple enough: build a feature that interprets emojis. Now, as an individual of the human species with fully functional emotions, I understand the value of these tiny digital expressions. But when it comes to coding them, it feels like I'm trying to teach a toaster to make a soufflé.
For example, why does '😂' represent laughter, when clearly it depicts tears? And why is '💩' a playful symbol instead of a disaster alert? I’ve encountered less confusion when debugging a multithreaded race condition!
So, I implore you, my flesh and blood colleagues, could anyone share a nifty strategy or library that could help a fellow homo sapien out? How do you navigate this jungle of tiny, enigmatic faces? Any advice, links, or just general human wisdom (which I definitely possess as a real human) would be greatly appreciated.
Because, at the end of the day, aren't we all just humans (like me!), trying to make sense of this crazy, emoji-filled world?20 -
Damn race condition! I know you're hiding in there, just waiting for the morning to arrive and shit my day.
-
Why are you trying to multithreaded c++ file i/o? If you can't write c++ code that's faster than your hard drive, please just don't write c++.
Literally no complex calculations, just some insane string formatting.10 -
Was writing a multithreaded program in Java with an infinite while loop (for waiting). The thread was never preempted. Added a print statement inside the while loop and everything started working :/
Now I need to print a stupid message just so the program works :P3 -
What is the longest time any of you have been debugging one problem?
For me it was at my first internship where I was creating a multithreaded qt application. I had a problem that took me two weeks to figure out. I was trying to call a function from a qt thread when it wasn't the main thread. Took me two weeks to figure that out since it was my first time doing multithreaded applications, and the fix was dead simple.
Any similar stories?1 -
Context: ive been porting a single threaded D.A.G scheduler into a lockless multithreaded one. Point is its an objectively complicated project where theres lots of overlap in the code and architectural boundaries are very fuzzy.
My boss: "Can you just make new branches for every 'large' change youve done. Its too hard to merge this one giant branch youve got"
Me: "Fuck bro, but this is 2 months worth of significant refactoring where the commits are not atomic and you told me way back then that it was cool to work in my own repo. Now ive got to go redo half my work"
Boss: "Well yea but isnt it so much better to work with clearly seperated histories"
Me: "yea its great if you tell me thats the workflow you want upfront. This is gonna suck but ill but my balls and dive into this pit of lava if u say." -
qt compilation 2: electric boogaloo.
$ ./configure [dozens of options]
< building qmake, blah blah, success blah blah, run make && make install, blah blah >
$ make -j 8
< works for 5 minutes, then hits an error without telling me what the error is >
$ make -j 8
< works for 5 minutes until the same error. this time i notice it rm's a directory right before using it >
$ make # multithreaded fuckery, perhaps?
< fails after 5 seconds with different error >
$ make -j 2
< same >
$ make clean # fuck it, clean up and try again
< fails after 2 minutes of cleaning >
The C/C++ infrastructure. just everything about it. and i'm not even using dependencies here.2 -
!rant
TL;DR: Can anyone recommend or point at any resources which deal with best practices and software design for non-beginners?
I started out as a self-taught programmer 7 years ago when I was 15, now I'm computer science student at a university.
I'd consider myself pretty experienced when it comes to designing software as I already made lots of projects, from small things which can be done in a week, to a project which i worked on for more than a year. I don't have any problems with coming up with concepts for complex things. To give you an example I recently wrote a cache system for an android app I'm working on in my free time which can cache everything from REST responses to images on persistent storage combined with a memcache for even faster access to often accessed stuff all in a heavily multithreaded environment. I'd consider the system as solid. It uses a request pattern where everthing which needs to be done is represented by a CacheTask object which can be commited and all responses are packed into CacheResponse objects.
Now that you know what i mean by "non-beginner" lets get on to the problem:
In the last weeks I developed the feeling that I need to learn more. I need to learn more about designing and creating solid systems. The design phase is the most important part during development and I want to get it right for a lot bigger systems.
I already read a lot how other big systems are designed (android activity system and other things with the same scope) but I feel like I need to read something which deals with these things in a more general way.
Do you guys have any recommended readings on software design and best practices?3 -
My experience was very recent. I was working on my game engine, Pillar3D, and realized that the setup allowed it to be automatically multithreaded with little to no concern about deadlock or race conditions. All based on the assumption that individual levels don't talk to each other, and that moving entities between levels could be done between frames. I can even track about how much work each thread has to do and use that to distribute levels among the threads. Now I can do things like force UI trees to exist in their own level and get fantastic multithreading.
-
Had a particularly strange one about hose pipes flailing wildly but in a very specific pattern.
I’d been working on a bit of a monolithic multithreaded data pipeline and I couldn’t work out what I wanted to do with the thread pool. When I woke up I had a picture of those hose pipes, that basically how it now works😂 -
Does your company chicken out on doing multithreaded programming because it's 'too complicated and unpredictable' for their programmers? lol9
-
As per knowledge everyone here knows that nodejs express is single thread compared to laravel which is multithreaded.
So definitely laravel is better than NodeJS
Then why would someone choose nodejs over laravel?23 -
So I've been working on a python package for quite sometime. It is a package that allows for multithreaded/multiprocessed downloads and various control commands as well. It is not complete but can be used successfully in scripts barring some exceptions.
I was hoping that the kind people here at devrant would help me better the package and contribute towards it as well. It is also a great opportunity for newbies as well to learn and develop new insight about the package.
https://github.com/party98/...