How to optimize a table/db with 200 insert/sec
There are multiple design changes to make.

Use InnoDB, not MyISAM.  You need row-level locking, not table-level locking.  (And set innodb_flush_log_at_trx_commit = 2)  A blog on conversion tips:  http://mysql.rjweb.org/doc.php/myisam2innodb .  A MyISAM INSERT always blocks a SELECT.  An InnoDB INSERT rarely blocks a SELECT.

Rethink your counters.  You have reached the "limit" of bumping counters on the fly.  Instead of bumping them one at a time, batch them.  One approach is to write the actions to a table, then do batch operations on it to update the various counters.

At 200/sec or more, I recommend ping-ponging two staging tables, as described here:  http://mysql.rjweb.org/doc.php/staging_table  Note that you can also batch the INSERTs with this technique, thereby speeding them up considerably.

Get rid of all the triggers, unless you can explain something that won't be efficiently covered by the above suggestions.

180s for an insert -- that is what can happen if connections and queries pile up.  Your Max_used_connections and Threads_running were probably very high.  More than a few dozen for either of those can imply things like "180s".

It would help to know the "flavor" of the application -- Data Warehousing?  MOOG?  Search?

EDIT:

Yes, convert all of your tables to InnoDB.  Then lower key_buffer_size to 40M and raise innodb_buffer_pool_size to 70% of RAM.  (Reference:  http://mysql.rjweb.org/doc.php/memory )

max_heap_table_size and tmp_table_size, currently at 512M are dangerously high, especially when hundreds of queries are running at the same time.  Perhaps no more than 1% of RAM is wise.  This change may have no impact, or it may impact large, complex, SELECTs.  But the change should help prevent swapping, which could be the real problem you are experiencing.  (Swapping is terrible for MySQL.)